home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1999 #2
/
Amiga Plus CD - 1999 - No. 2.iso
/
System-Boost
/
Workbench
/
TinyMeter
/
Source
/
TinyMeter_prefs
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-02-27
|
97KB
|
3,047 lines
/// headers
/* MUI */
#include <libraries/mui.h>
/* System */
#include <dos/dos.h>
#include <graphics/gfxmacros.h>
#include <workbench/workbench.h>
#include <exec/memory.h>
#include <datatypes/pictureclass.h>
#include <libraries/locale.h>
/* Prototypes */
#include <clib/alib_protos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/icon_protos.h>
#include <clib/graphics_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/utility_protos.h>
#include <clib/asl_protos.h>
#ifndef __GNUC__
#include <clib/muimaster_protos.h>
#else
#include <inline/muimaster.h>
#endif
/* ANSI C */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#ifndef MAKE_ID
#define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
#endif
///
#define STRINGARRAY YES
#include "TinyMeterPrefs.lh"
#include "tinymeter.h"
static struct MUI_CustomClass *CL_FieldsList;
static struct MUI_CustomClass *CL_ChooseFields;
static struct MUI_CustomClass *CL_MainWindow;
static struct MUI_CustomClass *CL_Composer;
static struct MUI_CustomClass *CL_Launcher;
#define USE_ABOUT_COLORS YES
#define USE_ABOUT_HEADER YES
#define USE_ABOUT_BODY YES
#define USE_LOGO_COLORS YES
#define USE_LOGO_HEADER YES
#define USE_LOGO_BODY YES
#define USE_HEADER_LOGO_COLORS YES
#define USE_HEADER_LOGO_HEADER YES
#define USE_HEADER_LOGO_BODY YES
#define USE_QUESTION_COLORS YES
#define USE_QUESTION_HEADER YES
#define USE_QUESTION_BODY YES
enum { MEN_PROJECT=1,MEN_ABOUT,MEN_OPEN,MEN_SAVE,MEN_QUIT,CMP_LOAD, CMP_SAVE, CMP_CANCEL, CMP_PROJECT };
/*************************************************************************************************/
/* misc funcs */
/*************************************************************************************************/
///
ULONG DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...)
{
return(DoSuperMethod(cl,obj,OM_NEW,&tag1,NULL));
}
LONG xget(Object *obj,ULONG attribute)
{
LONG x;
get(obj,attribute,&x);
return(x);
}
initColor(struct GAU_Color *col,Object *obj)
{
struct MUI_PenSpec pspec;
if(col->pen==TRUE)
{
sprintf(&pspec.buf[0],"p%d\0",col->red);
set(obj,MUIA_Pendisplay_Spec,&pspec);
}
else
{
sprintf(&pspec.buf[0],"r%08lx,%08lx,%08lx\0",col->red,col->green,col->blue);
set(obj,MUIA_Pendisplay_Spec,&pspec);
}
}
getColor(struct GAU_Color *col,Object *obj)
{
struct MUI_PenSpec *pspec;
char *buf;
ULONG *dummy1,dummy2,dummy3;
get(obj,MUIA_Pendisplay_Spec,&pspec);
if(buf=(char *)AllocVec(256L,MEMF_CLEAR))
{
strcpy(buf,&pspec->buf[0]);
if(buf[0])
{
switch (buf[0])
{
case 'r':
col->pen=(UWORD)FALSE;
sscanf(buf+1,"%lx,%lx,%lx",&dummy1,&dummy2,&dummy3);
col->red=(ULONG)dummy1;
col->green=(ULONG)dummy2;
col->blue=(ULONG)dummy3;
break;
case 'p':
col->pen=(UWORD)TRUE;
sscanf(buf+1,"%ld",&col->red);
break;
case 'm':
MUI_RequestA(NULL,NULL,0,"TinyMeterPrefs","BAD LUCK!","Please do not use MUI colors.\nThey are not supported by TinyMeter!\n\nUse Colormap or a RBG color instead.",NULL);
break;
}
}
FreeVec(buf);
}
}
__saveds __asm void IntuiMsgFunc(__a1 struct IntuiMessage *imsg,__a2 struct FileRequester *req)
{
if (imsg->Class==IDCMP_REFRESHWINDOW)
DoMethod(req->fr_UserData,MUIM_Application_CheckRefresh);
}
char *getfilename(Object *win,char *title,char *pattern,BOOL save)
{
static char buf[512];
struct FileRequester *req;
struct Window *w;
static LONG left=-1,top=-1,width=-1,height=-1;
Object *app = (Object *)xget(win,MUIA_ApplicationObject);
char *res = NULL;
static const struct Hook IntuiMsgHook = { { 0,0 },(VOID *)IntuiMsgFunc,NULL,NULL };
get(win,MUIA_Window_Window,&w);
if (left==-1)
{
left = w->LeftEdge+w->BorderLeft+2;
top = w->TopEdge+w->BorderTop+2;
width = w->Width-w->BorderLeft-w->BorderRight-4;
height = w->Height-w->BorderTop-w->BorderBottom-4;
}
if (req=MUI_AllocAslRequestTags(ASL_FileRequest,
ASLFR_Window, w,
ASLFR_TitleText, title,
ASLFR_InitialLeftEdge, left,
ASLFR_InitialTopEdge , top,
ASLFR_InitialWidth , width,
ASLFR_InitialHeight , height,
ASLFR_InitialPattern , pattern,
ASLFR_DoSaveMode , save,
ASLFR_DoPatterns , TRUE,
ASLFR_RejectIcons , TRUE,
ASLFR_UserData , app,
ASLFR_IntuiMsgFunc , &IntuiMsgHook,
TAG_DONE))
{
set(app,MUIA_Application_Sleep,TRUE);
if (MUI_AslRequestTags(req,TAG_DONE))
{
if (*req->fr_File)
{
res = buf;
strcpy(buf,req->fr_Drawer);
AddPart(buf,req->fr_File,sizeof(buf));
}
left = req->fr_LeftEdge;
top = req->fr_TopEdge;
width = req->fr_Width;
height = req->fr_Height;
}
MUI_FreeAslRequest(req);
set(app,MUIA_Application_Sleep,FALSE);
}
return(res);
}
///
extern struct Library *SysBase,
*IntuitionBase,
*UtilityBase,
*GfxBase,
*DOSBase,
*IconBase;
struct Library *MUIMasterBase,
*LocaleBase;
struct tm_data *maindata;
struct Catalog *Catalog;
/*************************************************************************************************/
/* locale stuff */
/*************************************************************************************************/
///
char *GetStr(int num)
{
struct AppString *as = (struct AppString *)AppStrings;
while (as->as_ID != num) as++;
if (LocaleBase && Catalog) return(GetCatalogStr(Catalog,num,as->as_Str));
return((char *)as->as_Str);
}
VOID LocalizeStringArray(char **array)
{
char **x;
for (x=array;*x;x++) *x = GetStr((int)*x);
}
VOID LocalizeNewMenu(struct NewMenu *nm)
{
for (;nm->nm_Type!=NM_END;nm++) if (nm->nm_Label != NM_BARLABEL) nm->nm_Label = GetStr((int)nm->nm_Label);
}
VOID InitLocale(VOID)
{
if (LocaleBase = OpenLibrary("locale.library",38L)) Catalog = (struct Catalog *)OpenCatalog(NULL,"TinyMeterPrefs.catalog",TAG_DONE);
}
VOID ExitLocale(VOID)
{
if (Catalog) { CloseCatalog(Catalog); Catalog =NULL; }
if (LocaleBase) { CloseLibrary(LocaleBase); LocaleBase=NULL; }
}
Object *MakePen()
{
return(MUI_NewObject(MUIC_Poppen, MUIA_CycleChain, 1, MUIA_Window_Title, GetStr(MO_MakePen), MUIA_Weight, 0, TAG_DONE));
}
///
/*************************************************/
/* some pics */
/*************************************************/
#include "about.c"
#include "header_logo.c"
#include "question.c"
#include "logo.c"
/*************************************************/
/* default settings */
/*************************************************/
///
struct tm_sys_set default_set=
{
"TM40",
1,
10,
10,
400,
2,
"Workbench",
"XHelvetica.font",
11,
bg_file,
"hd0:prefs/patterns/leather",
-3,
FALSE,0x55555555,0x55555555,0x55555555,
5,
1,
0,
TRUE,
win_normal,
0,
4,
4,
8,
8,
bd_standard,
FALSE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,
FALSE,0x0,0x0,0x0,
idle_own
};
struct tm_gau_set g4=
{
typ_volume,
typ_histmeter,
200,
"Quill.font",
11,
"ChipMem",
"HD1: %kd kb,%p%% free",
"HD1:",
FALSE,
ind_right,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,2,0,0,
TRUE,2,0,0,
FALSE,0,0xFFFFFFFF,0,
FALSE,0,0,0xFFFFFFFF,
FALSE,0xFFFFFFFF,0,0,
TRUE,2,0,0,
TRUE,1,0,0,
TRUE,1,0,0,
NULL
};
struct tm_gau_set g3=
{
typ_idle,
typ_histmeter,
200,
"Quill.font",
11,
"ChipMem",
"CPU %p%% free",
"",
FALSE,
ind_right,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,2,0,0,
TRUE,2,0,0,
FALSE,0,0xFFFFFFFF,0,
FALSE,0,0,0xFFFFFFFF,
FALSE,0xFFFFFFFF,0,0,
TRUE,2,0,0,
TRUE,1,0,0,
TRUE,1,0,0,
&g4
};
struct tm_gau_set g2=
{
typ_fast,
typ_gauge,
20,
"XHelvetica.font",
11,
"FastMem",
"%td Bytes free",
"",
FALSE,
ind_right,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
FALSE,
TRUE,2,0,0,
TRUE,2,0,0,
FALSE,0,0xFFFFFFFF,0,
FALSE,0,0,0xFFFFFFFF,
FALSE,0xFFFFFFFF,0,0,
TRUE,2,0,0,
TRUE,1,0,0,
TRUE,0,0,0,
&g3,
};
struct tm_gau_set g1=
{
typ_chip,
typ_gauge,
20,
"XHelvetica.font",
11,
"ChipMem",
"%td Bytes free",
"",
FALSE,
ind_right,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
FALSE,
TRUE,2,0,0,
TRUE,2,0,0,
FALSE,0,0xFFFFFFFF,0,
FALSE,0,0,0xFFFFFFFF,
FALSE,0xFFFFFFFF,0,0,
TRUE,2,0,0,
TRUE,1,0,0,
TRUE,0,0,0,
&g2
};
struct tm_gau_set default_gauge=
{
NULL,
typ_gauge,
80,
"topaz.font",
8,
"",
"",
"",
FALSE,
ind_right,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,2,0,0,
TRUE,2,0,0,
FALSE,0,0xFFFFFFFF,0,
FALSE,0,0,0xFFFFFFFF,
FALSE,0xFFFFFFFF,0,0,
TRUE,2,0,0,
TRUE,1,0,0,
TRUE,0,0,0,
NULL
};
struct tm_gau_set default_launcher=
{
NULL,
typ_gauge,
80,
"topaz.font",
8,
"",
"",
"",
FALSE,
ind_right,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,1,0,0,
TRUE,1,0,0,
FALSE,0,0xFFFFFFFF,0,
TRUE,1,0,0,
TRUE,3,0,0,
TRUE,2,0,0,
TRUE,1,0,0,
TRUE,0,0,0,
NULL
};
///
/*************************************************/
/* Drag & Drop lists */
/*************************************************/
/******************************************/
/* some hooks */
/******************************************/
///
char *gau_types[]=
{
(STRPTR)MDL_typ_space,
(STRPTR)MDL_typ_total,
(STRPTR)MDL_typ_chip,
(STRPTR)MDL_typ_fast,
(STRPTR)MDL_typ_volume,
(STRPTR)MDL_typ_cpu,
(STRPTR)MDL_typ_retina,
(STRPTR)MDL_typ_largest_chip,
(STRPTR)MDL_typ_largest_fast,
(STRPTR)MDL_typ_largest_total,
(STRPTR)MDL_typ_largest_retina,
(STRPTR)MDL_typ_clock,
(STRPTR)MDL_typ_simplelauncher,
(STRPTR)MDL_typ_iconlauncher,
0L,
};
__geta4 ULONG gau_consfunc(__a1 struct tm_gau_set *src)
{
return(src);
}
__geta4 void gau_desfunc(__a1 struct tm_gau_set *src)
{
FreeVec(src);
}
__geta4 ULONG gau_dispfunc(__a2 char **array,__a1 struct tm_gau_set *src)
{
if(src->type!=0)
{
*array++ = gau_types[src->type];
if(src->type==typ_volume)
{
*array = &src->expansion[0];
}
else *array = "";
}
else
{
*array++ = "-----------------";
*array = "";
}
return(0L);
}
static const struct Hook gau_ConstructHook = { { 0,0 }, (void *)gau_consfunc, NULL, NULL };
static const struct Hook gau_DestructHook = { { 0,0 }, (void *)gau_desfunc , NULL, NULL };
static const struct Hook gau_DisplayHook = { { 0,0 }, (void *)gau_dispfunc, NULL, NULL };
///
/******************************************/
/* FieldsList class */
/******************************************/
///
struct FieldsList_Data
{
LONG dummy;
};
ULONG FieldsList_DragQuery(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
{
if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
else if (msg->obj==(Object *)muiUserData(obj)) return(MUIV_DragQuery_Accept);
else return(MUIV_DragQuery_Refuse);
}
ULONG FieldsList_DragDrop(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
{
if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
else
{
struct tm_gau_set *entry;
LONG dropmark;
LONG sortable;
LONG active;
get(obj,MUIA_List_DragSortable,&sortable);
if (sortable)
{
get(msg->obj,MUIA_List_Active,&active);
if(entry=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),MEMF_CLEAR))
{
if((active==typ_simplelauncher)||(active==typ_iconlauncher))
{
CopyMem(&default_launcher,entry, sizeof(struct tm_gau_set));
strcpy(&entry->expansion[0],"Provide a filename!");
}
else
{
CopyMem(&default_gauge,entry, sizeof(struct tm_gau_set));
}
entry->type = (UWORD)active;
if(active==typ_clock_) entry->gauge_type=typ_clock;
get (obj, MUIA_List_DropMark, &dropmark);
DoMethod(obj, MUIM_List_InsertSingle, entry,dropmark);
set (obj, MUIA_List_Active, dropmark);
set (msg->obj, MUIA_List_Active, MUIV_List_Active_Off);
}
}
else
{
DoMethod(msg->obj,MUIM_List_Remove,MUIV_List_Remove_Active);
}
return(obj);
}
}
__geta4 ULONG FieldsList_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
{
switch (msg->MethodID)
{
case MUIM_DragQuery: return(FieldsList_DragQuery(cl,obj,(APTR)msg));
case MUIM_DragDrop : return(FieldsList_DragDrop (cl,obj,(APTR)msg));
}
return(DoSuperMethodA(cl,obj,msg));
}
///
/******************************************/
/* ChooseFields class */
/******************************************/
///
Object *available, *visible;
struct ChooseFields_Data
{
ULONG dummy;
};
struct ComposerMsg
{
ULONG MethodID;
Object *listview;
struct ChooseFields_Data *data;
};
#define Dis_ID_DoubleClickComposer 1
#define Dis_ID_ComposerClose 2
#define Dis_ID_ComposerSave 3
#define Dis_ID_LauncherClose 4
#define Dis_ID_LauncherSave 5
#define Dis_ID_CloneEntry 6
#define Originator ( TAG_USER + 1 )
#define Gauge_Settings ( TAG_USER + 2 )
static ULONG DoubleClickComposer(struct IClass *cl,Object *obj, struct ComposerMsg *msg)
{
struct tm_gau_set *desc;
Object *tmp;
DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
if (desc)
{
set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,TRUE);
switch (desc->type)
{
case typ_none:
break;
case typ_iconlauncher:
case typ_simplelauncher:
if (tmp = (APTR)NewObject(CL_Launcher->mcc_Class,NULL,
Originator, obj,
Gauge_Settings, desc,
TAG_DONE))
{
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp);
set(tmp,MUIA_Window_Open,TRUE);
}
break;
default:
if (tmp = (APTR)NewObject(CL_Composer->mcc_Class,NULL,
Originator, obj,
Gauge_Settings, desc,
TAG_DONE))
{
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp);
set(tmp,MUIA_Window_Open,TRUE);
}
else DisplayBeep(0);
break;
}
set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,FALSE);
}
return((ULONG)0);
}
static ULONG Clone_Entry(struct IClass *cl,Object *obj, struct ComposerMsg *msg)
{
struct tm_gau_set *desc,*news;
DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
if (desc)
{
if(news=AllocVec(sizeof(struct tm_gau_set),0L))
{
CopyMem(desc,news,sizeof(struct tm_gau_set));
DoMethod(msg->listview,MUIM_List_InsertSingle,news,MUIV_List_Insert_Active);
}
}
}
static ULONG ChooseFields_New(struct IClass *cl,Object *obj,struct opSet *msg)
{
Object *BT_Clone;
obj = (Object *)DoSuperNew(cl,obj,
MUIA_Group_Columns, 2,
MUIA_Group_VertSpacing, 1,
Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Available), End,
Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Selected ), End,
Child, ListviewObject,
MUIA_Listview_DragType, 1,
MUIA_Listview_List, available = NewObject(CL_FieldsList->mcc_Class,NULL,
InputListFrame,
MUIA_List_SourceArray , gau_types,
MUIA_List_ShowDropMarks, FALSE,
TAG_DONE),
End,
Child,VGroup,
Child, ListviewObject,
MUIA_Listview_DragType, 1,
MUIA_Listview_DoubleClick, TRUE,
MUIA_Listview_List, visible = NewObject(CL_FieldsList->mcc_Class,NULL,
InputListFrame,
MUIA_List_ConstructHook, &gau_ConstructHook,
MUIA_List_DestructHook , &gau_DestructHook,
MUIA_List_DisplayHook , &gau_DisplayHook,
MUIA_List_Format , "MIW=50 MAW=100 BAR,",
MUIA_List_DragSortable , TRUE,
TAG_DONE),
End,
Child, BT_Clone=SimpleButton(GetStr(MCO_Clone)),
End,
End;
if (obj)
{
DoMethod(visible, MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,obj,2,Dis_ID_DoubleClickComposer,visible);
DoMethod(BT_Clone,MUIM_Notify,MUIA_Pressed,TRUE, obj,2,Dis_ID_CloneEntry ,visible);
set(available,MUIA_UserData,visible);
set(visible,MUIA_UserData,available);
set(available,MUIA_ShortHelp,GetStr(MDH_Available));
set(visible,MUIA_ShortHelp,GetStr(MDH_Selected));
}
return((ULONG)obj);
}
ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg);
ULONG Launcher_Close(struct IClass *cl, Object *obj, struct LauncherFinishMsg *msg);
static __saveds __asm ULONG ChooseFields_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
{
switch (msg->MethodID)
{
case OM_NEW : return(ChooseFields_New (cl,obj,(APTR)msg));
case Dis_ID_DoubleClickComposer : return(DoubleClickComposer (cl,obj,(APTR)msg));
case Dis_ID_ComposerClose : return(Composer_Close (cl,obj,(APTR)msg));
case Dis_ID_LauncherClose : return(Launcher_Close (cl,obj,(APTR)msg));
case Dis_ID_CloneEntry : return(Clone_Entry (cl,obj,(APTR)msg));
}
return(DoSuperMethodA(cl,obj,msg));
}
///
/*************************************************/
/* Composer Class */
/*************************************************/
/******************************************/
/* Composer Menu */
/******************************************/
///
struct NewMenu CmpMenuData[] =
{
{ NM_TITLE, (STRPTR)MCM_Gauge , 0 ,0 ,0 ,(APTR)CMP_PROJECT },
{ NM_ITEM , (STRPTR)MCM_Open ,"O",0 ,0 ,(APTR)CMP_LOAD },
{ NM_ITEM , (STRPTR)MCM_SaveAs ,"S",0 ,0 ,(APTR)CMP_SAVE },
{ NM_ITEM , NM_BARLABEL , 0 ,0 ,0 ,(APTR)0 },
{ NM_ITEM , (STRPTR)MCM_Cancel ,"C",0 ,0 ,(APTR)CMP_CANCEL },
{ NM_END,NULL,0,0,0,(APTR)0 }
};
///
/******************************************/
/* Composer class */
/******************************************/
///
#define Dis_ID_DoubleClickDevice 8
#define Dis_ID_SaveGauge 9
#define Dis_ID_LoadGauge 10
#define Dis_ID_ShowFormatHelp 11
struct Composer_Data
{
Object *ST_Label,
*PO_Device,
*ST_Device,
*CY_Type,
*NB_Height,
*CS_Colors[16],
*ST_Font,
*ST_Format,
*CM_3D,
*CM_Border,
*CM_Bg,
*CM_Shadow,
*CM_NoGauge,
*CM_NoFmt,
*CM_NoBase,
*CY_Indent,
*LV_Device,
*VL_Device,
*originator,
*sub_win,
*BT_Use,
*BT_Cancel,
*PO_Device,
*CMP_Menu,
*BT_Quest;
struct tm_gau_set *gauge;
};
static ULONG DoubleClickDev(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
{
char *my_ptr;
struct Composer_Data *data = INST_DATA(cl,obj);
DoMethod(data->VL_Device,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
if(my_ptr)
{
set(data->ST_Device,MUIA_String_Contents,my_ptr);
DoMethod(data->PO_Device,MUIM_Popstring_Close,0L);
return(DoSuperMethodA(cl,obj,msg));
}
else return(0L);
}
struct ComposerFinishMsg
{
ULONG MethodID;
Object *win;
ULONG ok;
};
ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
{
if(msg->ok)
{
DoMethod(msg->win,Dis_ID_ComposerSave,msg->win,TRUE);
}
set(msg->win,MUIA_Window_Open,FALSE);
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
MUI_DisposeObject(msg->win);
return((ULONG)0L);
}
ULONG Composer_Save(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
{
int i;
ULONG dummy;
struct Composer_Data *data = INST_DATA(cl,obj);
for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]);
get(data->ST_Label ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->label[0] , dummy ? (char *)dummy : " " );
get(data->ST_Device ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->expansion[0], dummy ? (char *)dummy : " " );
get(data->CY_Type ,MUIA_Cycle_Active ,&dummy); data->gauge->gauge_type =(UWORD)dummy;
get(data->NB_Height ,MUIA_Numeric_Value ,&dummy); data->gauge->size_y =(UWORD)dummy-100;
get(data->CM_3D ,MUIA_Selected ,&dummy); data->gauge->sty_3d =(UWORD)dummy;
get(data->CM_Border ,MUIA_Selected ,&dummy); data->gauge->sty_border =(UWORD)dummy;
get(data->CM_Bg ,MUIA_Selected ,&dummy); data->gauge->sty_bg =(UWORD)dummy;
get(data->CM_Shadow ,MUIA_Selected ,&dummy); data->gauge->sty_shadow =(UWORD)dummy;
get(data->CM_NoGauge,MUIA_Selected ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy;
get(data->CM_NoFmt ,MUIA_Selected ,&dummy); data->gauge->sty_noformat=(UWORD)dummy;
get(data->CM_NoBase ,MUIA_Selected ,&dummy); data->gauge->sty_nobase =(UWORD)dummy;
get(data->CY_Indent ,MUIA_Cycle_Active ,&dummy); data->gauge->indent =(UWORD)dummy;
get(data->ST_Font ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i);
strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i;
get(data->ST_Format ,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->format[0], dummy ? (char *)dummy : " " );
DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
}
char *types[] ={(STRPTR)MCL_Normal,(STRPTR)MCL_Historymeter,0L};
char *indent[] ={(STRPTR)MCL_center,(STRPTR)MCL_left,(STRPTR)MCL_right,0L};
char *regcomposer[] ={(STRPTR)MCR_general,(STRPTR)MCR_flags,(STRPTR)MCR_colors,0L};
insertComposerSettings(struct tm_gau_set *gauge, struct Composer_Data *data)
{
int i;
char dummy[256];
for(i=0;i<8;i++)
{
initColor(&gauge->Colors[i],data->CS_Colors[i]);
if(gauge->type == typ_clock_) set(data->CS_Colors[i],MUIA_Disabled,TRUE);
}
set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100);
if(gauge->type != typ_volume) set(data->PO_Device, MUIA_Disabled,TRUE);
if((gauge->gauge_type==typ_histmeter)||(gauge->type==typ_clock_))
{
set(data->ST_Label, MUIA_Disabled,TRUE);
set(data->CM_3D, MUIA_Disabled,TRUE);
set(data->CM_Shadow, MUIA_Disabled,TRUE);
if(gauge->type==typ_clock_)
{
set(data->CM_Bg, MUIA_Disabled,TRUE);
set(data->CS_Colors[col_format] ,MUIA_Disabled,FALSE);
set(data->CS_Colors[col_dark] ,MUIA_Disabled,FALSE);
set(data->CM_Shadow ,MUIA_Disabled,FALSE);
set(data->CM_Border ,MUIA_Disabled,TRUE);
set(data->CM_NoGauge ,MUIA_Disabled,TRUE);
set(data->CM_NoFmt ,MUIA_Disabled,TRUE);
set(data->CM_NoBase ,MUIA_Disabled,TRUE);
set(data->CY_Type ,MUIA_Disabled,TRUE);
}
}
set(data->CM_3D ,MUIA_Selected,gauge->sty_3d);
set(data->CM_Border ,MUIA_Selected,gauge->sty_border);
set(data->CM_Bg ,MUIA_Selected,gauge->sty_bg);
set(data->CM_Shadow ,MUIA_Selected,gauge->sty_shadow);
set(data->CM_NoGauge,MUIA_Selected,gauge->sty_nogauge);
set(data->CM_NoFmt ,MUIA_Selected,gauge->sty_noformat);
set(data->CM_NoBase ,MUIA_Selected,gauge->sty_nobase);
set(data->ST_Format ,MUIA_String_Contents,&gauge->format[0]);
strcpy(&dummy[0],gauge->font);
sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size);
set(data->ST_Font ,MUIA_String_Contents,&dummy[0]);
set(data->ST_Device ,MUIA_String_Contents,&gauge->expansion[0]);
set(data->ST_Label ,MUIA_String_Contents,&gauge->label[0]);
set(data->CY_Indent ,MUIA_Cycle_Active,gauge->indent);
set(data->CY_Type ,MUIA_Cycle_Active,gauge->gauge_type);
}
LoadGaugeSet(struct IClass *cl,Object *obj)
{
struct Composer_Data *data=INST_DATA(cl,obj);
char *file;
ULONG my_file;
ULONG buf;
UWORD old_type;
char old_expansion[128];
if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE))
{
if(my_file=(ULONG)Open(file,MODE_OLDFILE))
{
Read(my_file,&buf,4L);
if(buf==0x544D4731)
{
old_type=data->gauge->type;
CopyMem(&data->gauge->expansion[0],&old_expansion[0],128L);
Read(my_file,data->gauge,sizeof(struct tm_gau_set));
data->gauge->type=old_type;
CopyMem(&old_expansion[0],&data->gauge->expansion[0],128L);
insertComposerSettings(data->gauge,data);
}
else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL);
Close(my_file);
}
}
}
SaveGaugeSet(struct IClass *cl,Object *obj)
{
struct Composer_Data *data=INST_DATA(cl,obj);
char *file;
ULONG buf,my_file;
struct ComposerFinishMsg msg;
msg.ok=TRUE;
Composer_Save( cl,obj,&msg);
buf=0x544D4731;
if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE))
{
if(my_file=Open(file,MODE_NEWFILE))
{
Write(my_file,&buf,4L);
Write(my_file,data->gauge,sizeof(struct tm_gau_set));
Close(my_file);
}
}
}
Object *WI_HelpFmt,
*WI_HelpClock;
static ULONG Composer_New(struct IClass *cl,Object *obj,struct opSet *msg)
{
struct Composer_Data *data,*new_data;
if(new_data=AllocVec(sizeof(struct Composer_Data),0L))
{
if(new_data->gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList))
{
if( obj = (Object *)DoSuperNew(cl,obj,
MUIA_Window_Title , gau_types[new_data->gauge->type] ,
MUIA_Window_ID , MAKE_ID('T','M','C','O'),
MUIA_Window_Menustrip , new_data->CMP_Menu = MUI_MakeObject(MUIO_MenustripNM,CmpMenuData,0),
WindowContents, VGroup, ButtonFrame,
Child, HGroup,
Child, VGroup, MUIA_Background, MUII_SHADOW,
Child, VSpace(0),
Child, BodychunkObject,
MUIA_FixWidth , HEADER_LOGO_WIDTH ,
MUIA_FixHeight , HEADER_LOGO_HEIGHT,
MUIA_Bitmap_Width , HEADER_LOGO_WIDTH ,
MUIA_Bitmap_Height , HEADER_LOGO_HEIGHT,
MUIA_Bodychunk_Depth , HEADER_LOGO_DEPTH ,
MUIA_Bodychunk_Body , (UBYTE *)header_logo_body,
MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION,
MUIA_Bodychunk_Masking , HEADER_LOGO_MASKING,
MUIA_Bitmap_SourceColors , (ULONG *)header_logo_colors,
MUIA_Bitmap_Transparent , 0,
End,
End,
Child, RegisterGroup(regcomposer),
MUIA_Register_Frame, TRUE,
Child, ColGroup(2),
Child, VSpace(0),
Child, VSpace(0),
Child, Label(GetStr(MCO_type)),
Child, new_data->CY_Type=CycleObject,
MUIA_Cycle_Entries, types,
End,
Child, Label(GetStr(MCO_label)),
Child, new_data->ST_Label=String(0L,16),
Child, Label(GetStr(MCO_height)),
Child, ColGroup(2), Child, new_data->NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,1000,GetStr(MCO_height_fmt)), Child, HVSpace, End,
Child, Label(GetStr(MCO_font)),
Child, PopaslObject,
MUIA_Popstring_String, new_data->ST_Font=(Object *)String(0L,80),
MUIA_Popstring_Button, PopButton(MUII_PopUp),
MUIA_Popasl_Type , ASL_FontRequest,
ASLFO_TitleText , GetStr(MCO_sel_font),
End,
Child, Label(GetStr(MCO_device)),
Child, new_data->PO_Device=PopobjectObject,
MUIA_Popstring_String, new_data->ST_Device=String(0L,128),
MUIA_Popstring_Button, PopButton(MUII_PopUp),
MUIA_Popobject_Object, new_data->LV_Device=ListviewObject,
MUIA_Weight, 20,
MUIA_Listview_Input, TRUE,
MUIA_Listview_DoubleClick, TRUE,
MUIA_Listview_List, new_data->VL_Device=VolumelistObject,
InputListFrame,
MUIA_Dirlist_Directory, "ram:",
End,
End,
End,
Child, VSpace(0),
Child, VSpace(0),
End,
Child, ColGroup(2),
Child, VSpace(0),
Child, VSpace(0),
Child, Label(GetStr(MCO_3dlook)),
Child, new_data->CM_3D=CheckMark(new_data->gauge->sty_3d),
Child, Label(GetStr(MCO_border)),
Child, new_data->CM_Border=CheckMark(new_data->gauge->sty_border),
Child, Label(GetStr(MCO_nobgcol)),
Child, new_data->CM_Bg=CheckMark(new_data->gauge->sty_bg),
Child, Label(GetStr(MCO_shadow)),
Child, new_data->CM_Shadow=CheckMark(new_data->gauge->sty_shadow),
Child, Label(GetStr(MCO_disgaug)),
Child, new_data->CM_NoGauge=CheckMark(new_data->gauge->sty_nogauge),
Child, Label(GetStr(MCO_disfmt)),
Child, new_data->CM_NoFmt=CheckMark(new_data->gauge->sty_noformat),
Child, Label(GetStr(MCO_disbas)),
Child, new_data->CM_NoBase=CheckMark(new_data->gauge->sty_nobase),
Child, VSpace(0),
Child, VSpace(0),
End,
Child, ColGroup(2),
Child, ColGroup(2),
Child, VSpace(0),
Child, VSpace(0),
Child, Label(GetStr(MCO_col_label)),
Child, new_data->CS_Colors[col_label] =MakePen(),
Child, Label(GetStr(MCO_col_fmt)),
Child, new_data->CS_Colors[col_format] =MakePen(),
Child, Label(GetStr(MCO_col_bas)),
Child, new_data->CS_Colors[col_base] =MakePen(),
Child, Label(GetStr(MCO_col_cur)),
Child, new_data->CS_Colors[col_current] =MakePen(),
Child, VSpace(0),
Child, VSpace(0),
End,
Child, ColGroup(2),
Child, VSpace(0),
Child, VSpace(0),
Child, Label(GetStr(MCO_col_neg)),
Child, new_data->CS_Colors[col_negative] =MakePen(),
Child, Label(GetStr(MCO_col_bright)),
Child, new_data->CS_Colors[col_bright] =MakePen(),
Child, Label(GetStr(MCO_col_dark)),
Child, new_data->CS_Colors[col_dark] =MakePen(),
Child, Label(GetStr(MCO_col_bg)),
Child, new_data->CS_Colors[col_bg] =MakePen(),
Child, VSpace(0),
Child, VSpace(0),
End,
End,
End,
End,
Child, HGroup, GroupFrameT(GetStr(MCO_fmt)),
Child, new_data->ST_Format=(Object *)String(0L,128),
Child, new_data->BT_Quest=BodychunkObject,
ButtonFrame,
MUIA_InputMode , MUIV_InputMode_RelVerify,
MUIA_FixWidth , QUESTION_WIDTH ,
MUIA_FixHeight , QUESTION_HEIGHT,
MUIA_Bitmap_Width , QUESTION_WIDTH ,
MUIA_Bitmap_Height , QUESTION_HEIGHT,
MUIA_Bodychunk_Depth , QUESTION_DEPTH ,
MUIA_Bodychunk_Body , (UBYTE *)question_body,
MUIA_Bodychunk_Compression, QUESTION_COMPRESSION,
MUIA_Bodychunk_Masking , QUESTION_MASKING,
MUIA_Bitmap_SourceColors , (ULONG *)question_colors,
MUIA_Bitmap_Transparent , 0,
End,
Child, new_data->CY_Indent=CycleObject,
MUIA_Weight, 0,
MUIA_Cycle_Entries, indent,
End,
End,
Child, HGroup,
Child, new_data->BT_Use = (Object *)SimpleButton(GetStr(MCO_Use)),
Child, new_data->BT_Cancel = (Object *)SimpleButton(GetStr(MCO_Cancel)),
End,
End,
End)
{
data=INST_DATA(cl,obj);
CopyMem(new_data,data,sizeof(struct Composer_Data));
FreeVec(new_data);
set(data->ST_Label,MUIA_ShortHelp,GetStr(MOH_Label));
set(data->PO_Device,MUIA_ShortHelp,GetStr(MOH_Device));
set(data->CM_Border,MUIA_ShortHelp,GetStr(MOH_3d));
set(data->CM_Bg,MUIA_ShortHelp,GetStr(MOH_Bg));
set(data->CM_NoGauge,MUIA_ShortHelp,GetStr(MOH_NoGauge));
set(data->CM_NoFmt,MUIA_ShortHelp,GetStr(MOH_NoFmt));
set(data->CM_NoBase,MUIA_ShortHelp,GetStr(MOH_NoBase));
insertComposerSettings(data->gauge,data);
data->originator = (Object *)GetTagData(Originator,0,msg->ops_AttrList);
DoMethod(data->LV_Device, MUIM_Notify,MUIA_Listview_DoubleClick ,TRUE,obj,1,Dis_ID_DoubleClickDevice);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->ST_Label,3,MUIM_Set,MUIA_Disabled,FALSE);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->ST_Label,3,MUIM_Set,MUIA_Disabled,TRUE);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->CM_3D,3,MUIM_Set,MUIA_Disabled,FALSE);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_3D,3,MUIM_Set,MUIA_Disabled,TRUE);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->CM_Shadow,3,MUIM_Set,MUIA_Disabled,FALSE);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_Shadow,3,MUIM_Set,MUIA_Disabled,TRUE);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->CM_Bg,3,MUIM_Set,MUIA_Disabled,FALSE);
DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_Bg,3,MUIM_Set,MUIA_Disabled,TRUE);
if(data->gauge->type!=typ_clock_) DoMethod(data->BT_Quest, MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpFmt ,3,MUIM_Set,MUIA_Window_Open,TRUE);
else DoMethod(data->BT_Quest, MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpClock ,3,MUIM_Set,MUIA_Window_Open,TRUE);
DoMethod(obj, MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
DoMethod(data->BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
DoMethod(data->BT_Use, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,TRUE);
DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveGauge);
DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadGauge);
return((ULONG)obj);
}
}
}
return(0L);
}
static __saveds __asm ULONG ComposerDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
{
switch (msg->MethodID)
{
case OM_NEW : return(Composer_New (cl,obj,(APTR)msg));
case Dis_ID_ComposerSave : return(Composer_Save (cl,obj,(APTR)msg));
case Dis_ID_DoubleClickDevice : return(DoubleClickDev (cl,obj,(APTR)msg));
case Dis_ID_SaveGauge : return(SaveGaugeSet (cl,obj));
case Dis_ID_LoadGauge : return(LoadGaugeSet (cl,obj));
}
return(DoSuperMethodA(cl,obj,msg));
}
///
/*************************************************/
/* Launcher Class */
/*************************************************/
/******************************************/
/* Launcher Menu */
/******************************************/
///
struct NewMenu LauMenuData[] =
{
{ NM_TITLE, (STRPTR)MCM_Gauge , 0 ,0 ,0 ,(APTR)CMP_PROJECT },
{ NM_ITEM , (STRPTR)MCM_Open ,"O",0 ,0 ,(APTR)CMP_LOAD },
{ NM_ITEM , (STRPTR)MCM_SaveAs ,"S",0 ,0 ,(APTR)CMP_SAVE },
{ NM_ITEM , NM_BARLABEL , 0 ,0 ,0 ,(APTR)0 },
{ NM_ITEM , (STRPTR)MCM_Cancel ,"C",0 ,0 ,(APTR)CMP_CANCEL },
{ NM_END,NULL,0,0,0,(APTR)0 }
};
///
/******************************************/
/* Launcher class */
/******************************************/
///
#define lind_realcenter 0
#define lind_center 1
#define lind_left 2
#define lind_right 3
#define launch_wb 0
#define launch_cli 1
#define Dis_ID_NewEntry 13
#define Dis_ID_RemoveEntry 14
#define Dis_ID_CloneEntry 15
#define Dis_ID_ChangeActive 16
#define Dis_ID_InsertActive 17
#define Dis_ID_LoadSet 19
#define Dis_ID_LoadStr 20
#define Dis_ID_SaveLauncher 21
#define Dis_ID_LoadLauncher 22
struct lau_entry
{
char lau_titl[32];
char lau_cmd[256];
UWORD lau_type;
char lau_pth[256];
char lau_out[256];
char lau_img[256];
ULONG lau_stack;
};
char *reglauncher[] ={(STRPTR)MCR_entries,(STRPTR)MCR_general,(STRPTR)MCR_colors,0L};
char *cyplace[] ={(STRPTR)MCR_up,(STRPTR)MCR_down,(STRPTR)MCR_over,0L};
char *cyindent[] ={(STRPTR)MCR_rightcenter,(STRPTR)MCR_center,(STRPTR)MCR_left,(STRPTR)MCR_right,0L};
char *lau_type[] ={"WB","CLI",0L};
__saveds __asm APTR lau_consfunc(__a1 struct lau_entry *src)
{
return(src);
}
__saveds __asm ULONG lau_desfunc(__a1 struct lau_entry *src)
{
return(FreeVec(src));
}
__saveds __asm void lau_dispfunc(__a2 char **array,__a1 struct lau_entry *src)
{
*array++ = &src->lau_titl[0];
*array++ = &src->lau_cmd[0];
*array = lau_type[src->lau_type];
}
static const struct Hook lau_ConstructHook = { { 0,0 }, (void *)lau_consfunc, NULL, NULL };
static const struct Hook lau_DestructHook = { { 0,0 }, (void *)lau_desfunc , NULL, NULL };
static const struct Hook lau_DisplayHook = { { 0,0 }, (void *)lau_dispfunc, NULL, NULL };
struct Launcher_Data
{
struct tm_gau_set *gauge;
Object *originator,
*BT_Cancel,
*BT_Use,
*CS_Colors[8],
*LAU_Menu,
*LV_Entries,
*ST_listfile,
*CM_Xen,
*CM_Bg,
*CM_Shadow,
*CM_Border,
*CM_Transparent,
*BT_New,
*BT_Remove,
*BT_Clone,
*BT_Save,
*BT_Reload,
*ST_File,
*ST_Title,
*ST_Stack,
*ST_Path,
*ST_Out,
*CY_File,
*CY_Place,
*CY_Indent,
*NB_Height,
*ST_Font,
*ST_Label,
*ST_Img,
*ST_MImg;
};
struct LauncherFinishMsg
{
ULONG MethodID;
Object *win;
ULONG ok;
};
ULONG Launcher_Close(struct IClass *cl, Object *obj, struct LauncherFinishMsg *msg)
{
if(msg->ok)
{
if(DoMethod(msg->win,Dis_ID_LauncherSave))
{
set(msg->win,MUIA_Window_Open,FALSE);
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
MUI_DisposeObject(msg->win);
}
}
else
{
set(msg->win,MUIA_Window_Open,FALSE);
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
MUI_DisposeObject(msg->win);
}
return((ULONG)0L);
}
insertLauncherSettings(struct tm_gau_set *gauge, struct Launcher_Data *data)
{
int i;
char dummy[256];
for(i=0;i<8;i++) initColor(&gauge->Colors[i],data->CS_Colors[i]);
set(data->CM_Xen ,MUIA_Selected, gauge->sty_3d);
set(data->CM_Transparent,MUIA_Selected, gauge->sty_noformat);
set(data->CM_Border ,MUIA_Selected, gauge->sty_border);
set(data->CM_Bg ,MUIA_Selected, gauge->sty_bg);
set(data->CM_Shadow ,MUIA_Selected, gauge->sty_shadow);
set(data->CY_Place ,MUIA_Cycle_Active, gauge->sty_nogauge);
set(data->CY_Indent ,MUIA_Cycle_Active, gauge->indent);
set(data->ST_listfile,MUIA_String_Contents, gauge->expansion);
set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100);
strcpy(&dummy[0],gauge->font);
sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size);
set(data->ST_Font ,MUIA_String_Contents,&dummy[0]);
if(gauge->type==typ_iconlauncher)
{
set(data->ST_Font, MUIA_Disabled, TRUE);
set(data->NB_Height, MUIA_Disabled, TRUE);
set(data->CM_Xen, MUIA_Disabled, TRUE);
set(data->CM_Border, MUIA_Disabled, TRUE);
set(data->CM_Bg, MUIA_Disabled, TRUE);
set(data->CM_Shadow, MUIA_Disabled, TRUE);
set(data->CY_Place, MUIA_Disabled, TRUE);
set(data->ST_Label, MUIA_Disabled, TRUE);
set(data->ST_MImg, MUIA_Disabled, TRUE);
for(i=0;i<8;i++) set(data->CS_Colors[i],MUIA_Disabled,TRUE);
}
}
saveLauncherSettings(struct Launcher_Data *data)
{
int i;
ULONG dummy;
for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]);
get(data->CM_Xen ,MUIA_Selected ,&dummy); data->gauge->sty_3d =(UWORD)dummy;
get(data->CM_Transparent,MUIA_Selected ,&dummy); data->gauge->sty_noformat=(UWORD)dummy;
get(data->CM_Border ,MUIA_Selected ,&dummy); data->gauge->sty_border =(UWORD)dummy;
get(data->CM_Bg ,MUIA_Selected ,&dummy); data->gauge->sty_bg =(UWORD)dummy;
get(data->CM_Shadow ,MUIA_Selected ,&dummy); data->gauge->sty_shadow =(UWORD)dummy;
get(data->CY_Place ,MUIA_Cycle_Active ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy;
get(data->CY_Indent ,MUIA_Cycle_Active ,&dummy); data->gauge->indent =(UWORD)dummy;
get(data->ST_listfile,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->expansion[0], dummy ? (char *)dummy : " " );
get(data->NB_Height ,MUIA_Numeric_Value ,&dummy); data->gauge->size_y =(UWORD)dummy-100;
get(data->ST_Font ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i);
strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i;
DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
}
LoadLauncherSet(struct IClass *cl,Object *obj)
{
struct Launcher_Data *data=INST_DATA(cl,obj);
char *file;
ULONG my_file;
ULONG buf;
if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE))
{
if(my_file=(ULONG)Open(file,MODE_OLDFILE))
{
Read(my_file,&buf,4L);
if(buf==0x544D4732)
{
Read(my_file,data->gauge,sizeof(struct tm_gau_set));
insertLauncherSettings(data->gauge,data);
DoMethod(obj,Dis_ID_LoadSet,0L);
}
else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL);
Close(my_file);
}
}
}
SaveLauncherSet(struct IClass *cl,Object *obj)
{
struct Launcher_Data *data=INST_DATA(cl,obj);
char *file;
ULONG buf,my_file;
saveLauncherSettings( data );
buf=0x544D4732;
if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE))
{
if(my_file=Open(file,MODE_NEWFILE))
{
Write(my_file,&buf,4L);
Write(my_file,data->gauge,sizeof(struct tm_gau_set));
Close(my_file);
}
}
}
struct Launcher_Message
{
ULONG MethodID;
};
static struct lau_entry lau_default=
{
"Empty",
"",
0,
"",
"",
"",
4096
};
Launcher_ChangeActive(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
struct lau_entry *entry;
struct Launcher_Data *data;
data=INST_DATA(cl,obj);
DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active, &entry);
if(entry)
{
set(data->ST_File, MUIA_String_Contents, entry->lau_cmd);
set(data->ST_Title, MUIA_String_Contents, entry->lau_titl);
set(data->ST_Path, MUIA_String_Contents, entry->lau_pth);
set(data->ST_Out, MUIA_String_Contents, entry->lau_out);
set(data->ST_Img, MUIA_String_Contents, entry->lau_img);
set(data->ST_Stack, MUIA_String_Integer, (ULONG)entry->lau_stack);
// This MUST be the last!
set(data->CY_File, MUIA_Cycle_Active , (ULONG)entry->lau_type);
}
}
Launcher_InsertActive(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
char *str,*foo,*dummy,*foobar,*klatuu;
struct lau_entry *entry;
ULONG active,stk;
struct Launcher_Data *data;
data=INST_DATA(cl,obj);
get(data->ST_File ,MUIA_String_Contents, &str);
get(data->ST_Title ,MUIA_String_Contents, &foo);
get(data->ST_Path ,MUIA_String_Contents, &dummy);
get(data->ST_Out ,MUIA_String_Contents, &foobar);
get(data->ST_Img ,MUIA_String_Contents, &klatuu);
get(data->ST_Img ,MUIA_String_Contents, &klatuu);
get(data->ST_Stack ,MUIA_String_Integer, &stk);
get(data->CY_File ,MUIA_Cycle_Active, &active);
DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active, &entry);
if(entry)
{
strcpy(entry->lau_titl,foo);
strcpy(entry->lau_cmd, str);
strcpy(entry->lau_pth, dummy);
strcpy(entry->lau_out, foobar);
strcpy(entry->lau_img, klatuu);
entry->lau_stack = stk;
entry->lau_type = (UWORD)active;
DoMethod(data->LV_Entries,MUIM_List_Redraw,MUIV_List_Redraw_Active);
}
}
__geta4 LONG AppMsgFunc(__A2 APTR obj, __A1 struct AppMessage **x)
{
struct WBArg *ap;
ULONG active;
struct lau_entry *entry;
struct AppMessage *amsg = *x;
int i;
static char buf[256];
char *b=buf;
for (ap=amsg->am_ArgList,i=0;i<amsg->am_NumArgs;i++,ap++)
{
get(obj,MUIA_List_Active,&active);
if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
{
CopyMem(&lau_default,entry, sizeof(struct lau_entry));
NameFromLock(ap->wa_Lock,buf,sizeof(buf));
strcpy(entry->lau_pth, buf);
strcpy(entry->lau_titl,ap->wa_Name);
AddPart(buf,ap->wa_Name,sizeof(buf));
strcpy(entry->lau_cmd, buf);
entry->lau_type=0L;
DoMethod(obj, MUIM_List_InsertSingle, entry,active);
set (obj, MUIA_List_Active, active);
}
}
return(0);
}
static const struct Hook AppMsgHook = { { NULL,NULL },(void *)AppMsgFunc,NULL,NULL };
Launcher_NewEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
ULONG active;
struct lau_entry *entry;
struct Launcher_Data *data;
data=INST_DATA(cl,obj);
get(data->LV_Entries,MUIA_List_Active,&active);
if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
{
CopyMem(&lau_default,entry, sizeof(struct lau_entry));
DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,active);
set (data->LV_Entries, MUIA_List_Active, active);
}
}
Launcher_RemoveEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
struct Launcher_Data *data;
data=INST_DATA(cl,obj);
DoMethod(data->LV_Entries,MUIM_List_Remove,MUIV_List_Remove_Active);
}
Launcher_CloneEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
struct lau_entry *desc,*news;
struct Launcher_Data *data;
data=INST_DATA(cl,obj);
DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
if (desc)
{
if(news=AllocVec(sizeof(struct lau_entry),0L))
{
CopyMem(desc,news,sizeof(struct lau_entry));
DoMethod(data->LV_Entries,MUIM_List_InsertSingle,news,MUIV_List_Insert_Active);
}
}
}
Launcher_CleanString(char *buffer)
{
int i;
if((i=strlen(buffer))<1)
{
buffer[0]=0x00;
}
else
{
if(buffer[i-1]==0x0a)
{
buffer[i-1]=0x00;
}
}
}
Launcher_LoadFromSettings(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
BPTR file;
char buffer[256];
struct Launcher_Data *data;
struct lau_entry *entry;
data=INST_DATA(cl,obj);
if(file=(BPTR)Open(&data->gauge->expansion[0],MODE_OLDFILE))
{
if(FGets(file,&buffer[0],255))
{
if(*((ULONG *)&buffer[0])==0x544D4C49)
{
if(FGets(file,&buffer[0],255))
{
Launcher_CleanString(buffer);
set(data->ST_Label,MUIA_String_Contents,&buffer[0]);
if(FGets(file,&buffer[0],255))
{
Launcher_CleanString(buffer);
set(data->ST_MImg,MUIA_String_Contents,&buffer[0]);
while(FGets(file,&buffer[0],32))
{
if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_titl,buffer);
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_cmd,buffer);
if(FGets(file,buffer,4))
{
entry->lau_type=*((UBYTE *)&buffer[0])-0x30;
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_pth,buffer);
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_out,buffer);
if(FGets(file,buffer,16))
{
Launcher_CleanString(buffer);
sscanf(buffer,"%ld",&entry->lau_stack);
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_img,buffer);
}
else strcpy(entry->lau_out,"");
}
else entry->lau_stack=0;
}
else strcpy(entry->lau_out," ");
}
else strcpy(entry->lau_pth," ");
}
else entry->lau_type=0;
}
else strcpy(entry->lau_titl,"Empty");
DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,MUIV_List_Insert_Bottom);
}
}
}
}
}
}
Close(file);
}
}
Launcher_LoadFromString(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
BPTR file;
char *filename;
char buffer[256];
struct Launcher_Data *data;
struct lau_entry *entry;
data=INST_DATA(cl,obj);;
get(data->ST_listfile,MUIA_String_Contents,&filename);
if(filename)
{
if(file=(BPTR)Open(filename,MODE_OLDFILE))
{
DoMethod(data->LV_Entries,MUIM_List_Clear,0L);
if(FGets(file,&buffer[0],255))
{
if(*((ULONG *)&buffer[0])==0x544D4C49)
{
if(FGets(file,&buffer[0],255))
{
Launcher_CleanString(buffer);
set(data->ST_Label,MUIA_String_Contents,&buffer[0]);
if(FGets(file,&buffer[0],255))
{
Launcher_CleanString(buffer);
set(data->ST_MImg,MUIA_String_Contents,&buffer[0]);
while(FGets(file,&buffer[0],32))
{
if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_titl,buffer);
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_cmd,buffer);
if(FGets(file,buffer,4))
{
entry->lau_type=*((UBYTE *)&buffer[0])-0x30;
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_pth,buffer);
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_out,buffer);
if(FGets(file,buffer,16))
{
Launcher_CleanString(buffer);
sscanf(buffer,"%ld",&entry->lau_stack);
if(FGets(file,buffer,255))
{
Launcher_CleanString(buffer);
strcpy(entry->lau_img,buffer);
}
else strcpy(entry->lau_out,"");
}
else entry->lau_stack=0;
}
else strcpy(entry->lau_out,"");
}
else strcpy(entry->lau_pth,"");
}
else entry->lau_type=0;
}
else strcpy(entry->lau_titl,"Empty");
DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,MUIV_List_Insert_Bottom);
}
}
}
}
}
}
Close(file);
}
}
}
ULONG Launcher_Save(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
{
int i;
struct lau_entry *entry;
char *filename,
*label,
buffer[256];
BPTR file;
struct Launcher_Data *data;
data=INST_DATA(cl,obj);
get(data->ST_listfile,MUIA_String_Contents,&filename);
if(filename&&filename[0])
{
if(strcmp(filename,"Provide a filename!")!=0)
{
if(file=(BPTR)Open(filename,MODE_NEWFILE))
{
FPuts(file,"TMLI\n");
get(data->ST_Label,MUIA_String_Contents,&label);
FPuts(file,label);
FPutC(file,0x0a);
get(data->ST_MImg,MUIA_String_Contents,&label);
FPuts(file,label);
FPutC(file,0x0a);
for (i=0;;i++)
{
DoMethod(data->LV_Entries,MUIM_List_GetEntry,i,&entry);
if (!entry) break;
FPuts(file,entry->lau_titl);
FPutC(file,0x0a);
FPuts(file,entry->lau_cmd);
FPutC(file,0x0a);
FPutC(file,entry->lau_type+0x30);
FPutC(file,0x0a);
FPuts(file,entry->lau_pth);
FPutC(file,0x0a);
FPuts(file,entry->lau_out);
FPutC(file,0x0a);
sprintf(&buffer[0],"%0ld",entry->lau_stack);
FPuts(file,&buffer[0]);
FPutC(file,0x0a);
FPuts(file,entry->lau_img);
FPutC(file,0x0a);
}
Close(file);
saveLauncherSettings(data);
return(TRUE);
}
}
}
MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MOL_nofilename_fmt),GetStr(MOL_nofilename),NULL);
return(FALSE);
}
static ULONG Launcher_New(struct IClass *cl,Object *obj,struct opSet *msg)
{
struct Launcher_Data *data,*new_data;
if(new_data=AllocVec(sizeof(struct Launcher_Data),0L))
{
if(new_data->gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList))
{
if( obj = (Object *)DoSuperNew(cl,obj,
MUIA_Window_Title , gau_types[new_data->gauge->type] ,
MUIA_Window_ID , MAKE_ID('T','M','L','A'),
MUIA_Window_Menustrip , new_data->LAU_Menu = MUI_MakeObject(MUIO_MenustripNM,LauMenuData,0),
MUIA_Window_AppWindow , TRUE,
WindowContents, VGroup, ButtonFrame,
Child, HGroup,
Child, VGroup, MUIA_Background, MUII_SHADOW,
Child, VSpace(0),
Child, BodychunkObject,
MUIA_FixWidth , HEADER_LOGO_WIDTH ,
MUIA_FixHeight , HEADER_LOGO_HEIGHT,
MUIA_Bitmap_Width , HEADER_LOGO_WIDTH ,
MUIA_Bitmap_Height , HEADER_LOGO_HEIGHT,
MUIA_Bodychunk_Depth , HEADER_LOGO_DEPTH ,
MUIA_Bodychunk_Body , (UBYTE *)header_logo_body,
MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION,
MUIA_Bodychunk_Masking , HEADER_LOGO_MASKING,
MUIA_Bitmap_SourceColors , (ULONG *)header_logo_colors,
MUIA_Bitmap_Transparent , 0,
End,
End,
Child, RegisterGroup(reglauncher),
MUIA_Register_Frame, TRUE,
Child, VGroup,
Child, VGroup,
Child, new_data->LV_Entries=(Object *)ListviewObject,
MUIA_Listview_Input, TRUE,
MUIA_Listview_DragType, 1,
MUIA_Dropable, FALSE,
MUIA_Listview_List, ListObject,
MUIA_Frame, MUIV_Frame_InputList,
MUIA_List_DragSortable, TRUE,
MUIA_List_ConstructHook, &lau_ConstructHook,
MUIA_List_DestructHook , &lau_DestructHook,
MUIA_List_DisplayHook , &lau_DisplayHook,
MUIA_List_Format , "BAR,MIW=5 MAW=100 BAR,",
MUIA_List_Active, MUIV_List_Active_Top,
End,
End,
Child, HGroup,
Child, Label(GetStr(MLO_Command)),
Child, new_data->ST_File=PopaslObject,
MUIA_Popstring_String, String(NULL,255),
MUIA_Popstring_Button, PopButton(MUII_PopFile),
ASLFO_TitleText , GetStr(MLO_sel_listfile),
End,
Child, new_data->CY_File=CycleObject,
MUIA_Cycle_Entries, &lau_type[0],
MUIA_Weight, 0,
End,
End,
Child, ColGroup(4),
Child, Label(GetStr(MLO_Title)),
Child, new_data->ST_Title=String(0,32),
Child, Label(GetStr(MLO_Pic)),
Child, new_data->ST_Img=PopaslObject,
MUIA_Popstring_String, String(NULL,255),
MUIA_Popstring_Button, PopButton(MUII_PopFile),
ASLFO_TitleText , GetStr(MLO_sel_listfile),
End,
Child, Label(GetStr(MLO_WorkDir)),
Child, new_data->ST_Path=PopaslObject,
MUIA_Popstring_String, String(NULL,255),
MUIA_Popstring_Button, PopButton(MUII_PopFile),
ASLFO_TitleText , GetStr(MLO_sel_listfile),
End,
Child, Label(GetStr(MLO_OutPut)),
Child, new_data->ST_Out=String(NULL,32),
Child, Label(GetStr(MLO_Stack)),
Child, new_data->ST_Stack=StringObject,
StringFrame,
MUIA_String_Accept, "0123456789",
MUIA_String_MaxLen, 32,
MUIA_String_Contents, NULL,
End,
Child, HVSpace,
Child, HVSpace,
End,
Child, ColGroup(3),
Child, new_data->BT_New=SimpleButton(GetStr(MLO_New)),
Child, new_data->BT_Remove=SimpleButton(GetStr(MLO_Remove)),
Child, new_data->BT_Clone=SimpleButton(GetStr(MLO_Clone)),
End,
End,
End,
Child, VGroup,
MUIA_Group_SameWidth,FALSE,
Child, ColGroup(2),
Child, Label(GetStr(MCO_xen)),
Child, HGroup, Child, new_data->CM_Xen=CheckMark(new_data->gauge->sty_3d), Child, HVSpace, End,
Child, Label(GetStr(MCO_transparent)),
Child, HGroup, Child, new_data->CM_Transparent=CheckMark(new_data->gauge->sty_noformat), Child, HVSpace, End,
Child, Label(GetStr(MCO_slabel)),
Child, HGroup, Child, new_data->CM_Shadow=CheckMark(new_data->gauge->sty_shadow), Child, HVSpace, End,
Child, Label(GetStr(MCO_background)),
Child, HGroup, Child, new_data->CM_Bg=CheckMark(new_data->gauge->sty_bg), Child, HVSpace, End,
Child, Label(GetStr(MCO_border)),
Child, HGroup, Child, new_data->CM_Border=CheckMark(new_data->gauge->sty_border), Child, HVSpace, End,
Child, Label(GetStr(MCO_place)),
Child, HGroup, Child, new_data->CY_Place=CycleObject,
MUIA_Cycle_Entries, &cyplace[0],
End, Child, HVSpace, End,
Child, Label(GetStr(MCR_poslabel)),
Child, HGroup, Child, new_data->CY_Indent=CycleObject,
MUIA_Cycle_Entries, &cyindent[0],
End, Child, HVSpace, End,
Child, Label(GetStr(MCO_height)),
Child, ColGroup(2), Child, new_data->NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,1000,GetStr(MCO_height_fmt)), Child, HVSpace, End,
Child, Label(GetStr(MCO_font)),
Child, PopaslObject,
MUIA_Popstring_String, new_data->ST_Font=(Object *)String(0L,80),
MUIA_Popstring_Button, PopButton(MUII_PopUp),
MUIA_Popasl_Type , ASL_FontRequest,
ASLFO_TitleText , GetStr(MCO_sel_font),
End,
End,
End,
Child, ColGroup(2),
Child, ColGroup(2),
Child, VSpace(0),
Child, VSpace(0),
Child, Label(GetStr(MCO_col_label)),
Child, new_data->CS_Colors[col_label] =MakePen(),
Child, Label(GetStr(MCO_col_entry)),
Child, new_data->CS_Colors[col_format] =MakePen(),
Child, Label(GetStr(MCO_col_hbright)),
Child, new_data->CS_Colors[col_base] =MakePen(),
Child, Label(GetStr(MCO_col_hdark)),
Child, new_data->CS_Colors[col_current] =MakePen(),
Child, VSpace(0),
Child, VSpace(0),
End,
Child, ColGroup(2),
Child, VSpace(0),
Child, VSpace(0),
Child, Label(GetStr(MCO_col_cursor)),
Child, new_data->CS_Colors[col_negative] =MakePen(),
Child, Label(GetStr(MCO_col_bright)),
Child, new_data->CS_Colors[col_bright] =MakePen(),
Child, Label(GetStr(MCO_col_dark)),
Child, new_data->CS_Colors[col_dark] =MakePen(),
Child, Label(GetStr(MCO_col_bg)),
Child, new_data->CS_Colors[col_bg] =MakePen(),
Child, VSpace(0),
Child, VSpace(0),
End,
End,
End,
End,
Child, VGroup,
Child, ColGroup(2), GroupFrame,
Child, Label(GetStr(MCO_label)),
Child, ColGroup(3),
Child, new_data->ST_Label=String(0L,16),
Child, Label(GetStr(MLO_Pic)),
Child, new_data->ST_MImg=PopaslObject,
MUIA_Popstring_String, String(NULL,255),
MUIA_Popstring_Button, PopButton(MUII_PopFile),
ASLFO_TitleText , GetStr(MLO_sel_picfile),
End,
End,
Child, Label(GetStr(MLO_listfile)),
Child, HGroup,
Child, new_data->ST_listfile=PopaslObject,
MUIA_Popstring_String, String(NULL,255),
MUIA_Popstring_Button, PopButton(MUII_PopFile),
ASLFO_TitleText , GetStr(MLO_sel_listfile),
End,
Child, new_data->BT_Reload=TextObject,
ButtonFrame,
MUIA_Text_Contents, GetStr(MLO_Load),
MUIA_Text_PreParse, "\33c",
MUIA_InputMode , MUIV_InputMode_RelVerify,
MUIA_Background , MUII_ButtonBack,
MUIA_Weight, 0,
End,
End,
End,
Child, HGroup,
Child, new_data->BT_Save = (Object *)SimpleButton(GetStr(MLO_Save)),
Child, new_data->BT_Cancel = (Object *)SimpleButton(GetStr(MCO_Cancel)),
End,
End,
End,
End)
{
data=INST_DATA(cl,obj);
set(data->ST_Stack,MUIA_ShortHelp,GetStr(MOL_Stack));
set(data->ST_Out,MUIA_ShortHelp,GetStr(MOL_Out));
set(data->ST_listfile,MUIA_ShortHelp,GetStr(MOL_listfile));
CopyMem(new_data,data,sizeof(struct Launcher_Data));
FreeVec(new_data);
data->originator = (Object *)GetTagData(Originator,0,msg->ops_AttrList);
insertLauncherSettings(data->gauge,data);
DoMethod(obj,Dis_ID_LoadSet,0L);
DoMethod(obj, MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,FALSE,data->ST_listfile);
DoMethod(data->BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,FALSE,data->ST_listfile);
DoMethod(data->BT_Save, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,TRUE, data->ST_listfile);
DoMethod(data->BT_New, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_NewEntry);
DoMethod(data->BT_Remove, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_RemoveEntry);
DoMethod(data->BT_Clone, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_CloneEntry);
DoMethod(data->BT_Reload, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_LoadStr);
DoMethod(data->LV_Entries,MUIM_Notify,MUIA_List_Active,MUIV_EveryTime, obj,1,Dis_ID_ChangeActive);
DoMethod(data->ST_File, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive);
DoMethod(data->ST_Title, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive);
DoMethod(data->ST_Stack, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive);
DoMethod(data->ST_Path, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive);
DoMethod(data->ST_Img, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive);
DoMethod(data->CY_File, MUIM_Notify,MUIA_Cycle_Active,MUIV_EveryTime, obj,1,Dis_ID_InsertActive);
DoMethod(data->LV_Entries,MUIM_Notify,MUIA_AppMessage,MUIV_EveryTime,data->LV_Entries,3,MUIM_CallHook,&AppMsgHook,MUIV_TriggerValue);
set(data->ST_Out,MUIA_Disabled,TRUE);
DoMethod(data->CY_File, MUIM_Notify,MUIA_Cycle_Active,0,data->ST_Out,3,MUIM_Set,MUIA_Disabled,TRUE);
DoMethod(data->CY_File, MUIM_Notify,MUIA_Cycle_Active,1,data->ST_Out,3,MUIM_Set,MUIA_Disabled,FALSE);
DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveLauncher);
DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadLauncher);
return((ULONG)obj);
}
}
}
return(0L);
}
static __saveds __asm ULONG LauncherDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
{
switch (msg->MethodID)
{
case OM_NEW : return(Launcher_New(cl,obj,(APTR)msg));
case Dis_ID_NewEntry : return(Launcher_NewEntry(cl,obj,(APTR)msg));
case Dis_ID_RemoveEntry : return(Launcher_RemoveEntry(cl,obj,(APTR)msg));
case Dis_ID_CloneEntry : return(Launcher_CloneEntry(cl,obj,(APTR)msg));
case Dis_ID_ChangeActive : return(Launcher_ChangeActive(cl,obj,(APTR)msg));
case Dis_ID_InsertActive : return(Launcher_InsertActive(cl,obj,(APTR)msg));
case Dis_ID_LauncherSave : return(Launcher_Save(cl,obj,(APTR)msg));
case Dis_ID_LoadStr : return(Launcher_LoadFromString(cl,obj,(APTR)msg));
case Dis_ID_LoadSet : return(Launcher_LoadFromSettings(cl,obj,(APTR)msg));
case Dis_ID_SaveLauncher : return(SaveLauncherSet(cl,obj));
case Dis_ID_LoadLauncher : return(LoadLauncherSet(cl,obj));
}
return(DoSuperMethodA(cl,obj,msg));
}
///
/*************************************************/
/* Main Window and his dispatcher */
/*************************************************/
/******************************************/
/* some vars */
/******************************************/
///
#define Dis_ID_DoubleClick1 1
#define Dis_ID_Finish 2
#define Dis_ID_DoubleClick2 3
#define Dis_ID_Save 4
#define Dis_ID_Snap 5
#define Dis_ID_Load 6
struct NewMenu MenuData1[] =
{
{ NM_TITLE, (STRPTR)MM_Project , 0 ,0 ,0 ,(APTR)MEN_PROJECT },
{ NM_ITEM , (STRPTR)MM_Open ,"O",0 ,0 ,(APTR)MEN_OPEN },
{ NM_ITEM , (STRPTR)MM_SaveAs ,"S",0 ,0 ,(APTR)MEN_SAVE },
{ NM_ITEM , (STRPTR)MM_About ,"?",0 ,0 ,(APTR)MEN_ABOUT },
{ NM_ITEM , NM_BARLABEL , 0 ,0 ,0 ,(APTR)0 },
{ NM_ITEM , (STRPTR)MM_Quit ,"Q",0 ,0 ,(APTR)MEN_QUIT },
{ NM_END,NULL,0,0,0,(APTR)0 }
};
struct ls_layout
{
char *entry_desc;
BYTE entry_selected;
BOOL entry_max;
char *entry[6];
};
struct ls_layout switches[]=
{
{(STRPTR)ML_Window, 0,0,0,0,0,0,0,0},
{(STRPTR)ML_BgPic, 0,2,(STRPTR)ML_BgPic_None,(STRPTR)ML_BgPic_File,(STRPTR)ML_BgPic_Snap,0,0,0},
{(STRPTR)ML_WinBeh, 0,2,(STRPTR)ML_WinBeh_Normal,(STRPTR)ML_WinBeh_Front,(STRPTR)ML_WinBeh_Back,0,0,0},
{(STRPTR)ML_WinMov, 0,1,(STRPTR)ML_WinMov_Normal,(STRPTR)ML_WinMov_Fixed,0,0,0,0},
{(STRPTR)ML_Border, 0,3,(STRPTR)ML_Border_None,(STRPTR)ML_Border_Simple,(STRPTR)ML_Border_Standard,(STRPTR)ML_Border_Double,0,0},
{(STRPTR)ML_Startup, 0,0,0,0,0,0,0,0},
{(STRPTR)ML_ScrNot, 0,1,(STRPTR)ML_ScrNot_No,(STRPTR)ML_ScrNot_Yes,0,0,0,0},
{(STRPTR)ML_Cpu, 0,2,(STRPTR)ML_Cpu_None,(STRPTR)ML_Cpu_Executive,(STRPTR)ML_Cpu_Own,0,0,0},
NULL
};
char *mainlister[]=
{
(STRPTR)MOL_General,
(STRPTR)MOL_Compose,
NULL
};
char *sublister[]=
{
(STRPTR)MOL_sub_General,
(STRPTR)MOL_sub_Flags,
(STRPTR)MOL_sub_Window,
NULL
};
struct MainData
{
ULONG dummy;
};
char *pubscr[256];
Object *BT_Save,
*BT_Use,
*BT_Test,
*BT_Cancel,
*ls_Switch,
*ls_PubScr,
*lv_Switch,
*lv_PubScr,
*ST_PubScr,
*PO_PubScr,
*MN_Main,
*WI_About,
*IN_posx,
*IN_posy,
*IN_sizx,
*ST_bg,
*NB_wait,
*NB_mem,
*NB_vol,
*NB_bordx,
*NB_bordy,
*NB_spcx,
*NB_spcy,
*NB_col,
*NB_pri,
*MN_Colors[3],
*CM_Falling,
*BT_Snap,
*LV_Composer;
///
/******************************************/
/* some listview hooks */
/******************************************/
///
__saveds __asm APTR lay_consfunc(__a1 struct ls_layout *src) { return(src); }
__saveds __asm ULONG lay_desfunc(__a1 struct ls_layout *src) { return(0L); }
__saveds __asm void lay_dispfunc(__a2 char **array,__a1 struct ls_layout *src)
{
*array++ = src->entry_desc;
*array = src->entry[src->entry_selected];
}
static const struct Hook lay_ConstructHook = { { 0,0 }, (void *)lay_consfunc, NULL, NULL };
static const struct Hook lay_DestructHook = { { 0,0 }, (void *)lay_desfunc , NULL, NULL };
static const struct Hook lay_DisplayHook = { { 0,0 }, (void *)lay_dispfunc, NULL, NULL };
///
/******************************************/
/* load settings and a method */
/******************************************/
///
#define load_standard 0
#define load_file 1
struct LoadSetMsg
{
ULONG MethodID;
ULONG what;
};
insertSettings(struct tm_sys_set *set,struct tm_gau_set *list)
{
struct ls_layout *src;
set(NB_col ,MUIA_Numeric_Value,set->colums);
set(NB_bordx,MUIA_Numeric_Value,set->win_border_x);
set(NB_bordy,MUIA_Numeric_Value,set->win_border_y);
set(NB_spcx ,MUIA_Numeric_Value,set->win_space_x);
set(NB_spcy ,MUIA_Numeric_Value,set->win_space_y);
set(NB_wait ,MUIA_Numeric_Value,set->start_wait);
set(NB_mem ,MUIA_Numeric_Value,set->mem_refresh);
set(NB_vol ,MUIA_Numeric_Value,set->vol_refresh);
set(NB_pri ,MUIA_Numeric_Value,set->pri);
DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src);
src->entry_selected=set->bg_type;
DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src);
src->entry_selected=set->win_backfront;
DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src);
src->entry_selected=set->win_move;
DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src);
src->entry_selected=set->bd_type;
DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src);
src->entry_selected=set->start_usescreennotify;
DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src);
src->entry_selected=set->Executive;
initColor(&set->bg_color,MN_Colors[0]);
initColor(&set->bright_color,MN_Colors[1]);
initColor(&set->dark_color,MN_Colors[2]);
set(ST_PubScr, MUIA_String_Contents ,&set->pub_name[0]);
set(IN_posx, MUIA_String_Integer ,set->x_pos);
set(IN_posy, MUIA_String_Integer ,set->y_pos);
set(IN_sizx, MUIA_String_Integer ,set->x_siz);
set(ST_bg, MUIA_String_Contents ,&set->bg_picture[0]);
set(CM_Falling, MUIA_Selected ,set->lay_falling);
DoMethod(visible,MUIM_List_Clear,0L);
do
{
DoMethod(visible,MUIM_List_InsertSingle,list,MUIV_List_Insert_Bottom);
}
while(list=list->next);
DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_All);
}
int getNum(struct tm_gau_set *list)
{
int num=1;
while(list=list->next)num++;
return(num);
}
useDefault(struct tm_data *data)
{
struct tm_gau_set *many,
*act,
*old;
CopyMem((char *)&default_set,data->set,sizeof(struct tm_sys_set));
if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
{
many=&g1; data->list=act; CopyMem((char *)many,act,sizeof(struct tm_gau_set));
while(many=many->next)
{
old=act;
if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
{
old->next=act;
CopyMem((char *)many,act,sizeof(struct tm_gau_set));
}
else {act->next=0L;return;}
}
act->next=0L;
}
else data->list=0L;
}
BOOL loadSettings(Object *obj,struct tm_data *data, char *file)
{
ULONG my_file;
struct tm_gau_set *many,*act;
if(!maindata->set)maindata->set=AllocVec(sizeof(struct tm_sys_set),0L);
if(my_file=(UBYTE *)Open(file,MODE_OLDFILE))
{
if(!Read(my_file,data->set,(ULONG)sizeof(struct tm_sys_set)))
{
useDefault(data);
}
else
{
act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
data->list=act; many=act;
while(Read(my_file,(char *)act,(ULONG)sizeof(struct tm_gau_set)))
{
many=act;
act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
many->next=act;
}
many->next=NULL; FreeVec(act); act=NULL;
}
Close(my_file);
}
else useDefault(data);
data->num_of_gaug=getNum(data->list);
}
ULONG loadManager(struct IClass *cl,Object *obj, struct LoadSetMsg *msg)
{
char *file;
switch (msg->what)
{
case load_standard:
loadSettings(obj,maindata,"ENV:TinyMeter");
insertSettings(maindata->set,maindata->list);
break;
case load_file:
if(file=getfilename(obj,GetStr(MM_OpenTitle),"#?.tm",FALSE))
{
loadSettings(obj,maindata,file);
insertSettings(maindata->set,maindata->list);
}
break;
}
return((ULONG)DoSuperMethodA(cl,obj,msg));
}
///
/******************************************/
/* test settings and window snapping */
/******************************************/
///
#include <exec/memory.h>
#include <exec/ports.h>
#include <exec/execbase.h>
#define test_test 0
#define test_getwin 1
struct TestMessage
{
struct Message ts_Message;
ULONG MethodID;
struct tm_sys_set *set;
struct tm_gau_set *list;
ULONG posx,
posy,
sizx;
};
struct TestMessage *ts_msg;
struct MsgPort *p_port;
struct MsgPort *p_reply;
BOOL SafePutToPort(struct Message *message, char *portname)
{
struct MsgPort *port;
Forbid();
port = (struct MsgPort *)FindPort(portname);
if (port) PutMsg(port, (struct Message *) message);
Permit();
return(port ? TRUE : FALSE);
}
ULONG InitTestSettings()
{
if(
( ts_msg =(struct TestMessage *)AllocMem (sizeof(struct TestMessage),MEMF_PUBLIC|MEMF_CLEAR)) &&
( p_reply=(struct MsgPort *) CreatePort(0,0))
) return (1L);
else return (0L);
}
FreeTestSettings()
{
if(ts_msg) FreeMem (ts_msg,sizeof(struct TestMessage));
if(p_reply)DeletePort (p_reply);
}
struct TestMessage *TestSettings(ULONG type)
{
ULONG i,j;
struct tm_gau_set *act,
*all[64];
if( FindPort("TinyMeter") )
if( ts_msg && p_reply)
{
ts_msg->ts_Message.mn_Node.ln_Type = NT_MESSAGE;
ts_msg->ts_Message.mn_ReplyPort = p_reply;
ts_msg->ts_Message.mn_Length = sizeof ( struct TestMessage );
ts_msg->MethodID = type;
switch (type)
{
case test_test:
for(i=0;i<64;i++)all[i]=0L;
for(i=0;;i++)
{
DoMethod(visible,MUIM_List_GetEntry,i,&act);
if(!act) break;
if(i==63) break;
if(all[i]=AllocVec(sizeof(struct tm_gau_set),0L))
{
CopyMem(act, all[i], sizeof(struct tm_gau_set));
}
else return(0L);
}
for(j=0;j<i;j++)
{
all[j]->next=all[j+1];
}
ts_msg->list=all[0];
if(ts_msg->set = AllocVec(sizeof(struct tm_sys_set),0L))
{
CopyMem(maindata->set,ts_msg->set,sizeof(struct tm_sys_set));
}
else return(0L);
break;
case test_getwin:
ts_msg->list=0L;
ts_msg->set =0L;
break;
}
if (SafePutToPort((struct Message *)ts_msg,"TinyMeter"))
{
WaitPort(p_reply);
return(GetMsg(p_reply));
}
}
return(0L);
}
///
/******************************************/
/* snapWindow method */
/******************************************/
///
snapWindow(struct IClass *cl,Object *obj, struct Msg *msg)
{
struct TestMessage *testMsg;
testMsg=TestSettings(test_getwin);
set(IN_posx, MUIA_String_Integer ,testMsg->posx);
set(IN_posy, MUIA_String_Integer ,testMsg->posy);
set(IN_sizx, MUIA_String_Integer ,testMsg->sizx);
}
///
/******************************************/
/* save settings and the method for it */
/******************************************/
///
#define save_save 0
#define save_use 1
#define save_test 2
#define save_file 3
#define save_cancel 4
struct SaveSetMsg
{
ULONG MethodID;
ULONG what;
};
getSettings(struct tm_sys_set *set)
{
ULONG dummy;
struct ls_layout *src;
get(NB_col ,MUIA_Numeric_Value,&dummy);set->colums =(UWORD)dummy;
get(NB_bordx,MUIA_Numeric_Value,&dummy);set->win_border_x =(UWORD)dummy;
get(NB_bordy,MUIA_Numeric_Value,&dummy);set->win_border_y =(UWORD)dummy;
get(NB_spcx ,MUIA_Numeric_Value,&dummy);set->win_space_x =(UWORD)dummy;
get(NB_spcy ,MUIA_Numeric_Value,&dummy);set->win_space_y =(UWORD)dummy;
get(NB_wait ,MUIA_Numeric_Value,&dummy);set->start_wait =(UWORD)dummy;
get(NB_mem ,MUIA_Numeric_Value,&dummy);set->mem_refresh =(UWORD)dummy;
get(NB_vol ,MUIA_Numeric_Value,&dummy);set->vol_refresh =(UWORD)dummy;
get(NB_pri ,MUIA_Numeric_Value,&dummy);set->pri =(BYTE) dummy;
get(CM_Falling,MUIA_Selected, &dummy);set->lay_falling =(UBYTE)dummy;
DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src); set->bg_type =src->entry_selected;
DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src); set->win_backfront =src->entry_selected;
DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src); set->win_move =src->entry_selected;
DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src); set->bd_type =src->entry_selected;
DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src); set->start_usescreennotify=src->entry_selected;
DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src); set->Executive =src->entry_selected;
getColor(&set->bg_color, MN_Colors[0]);
getColor(&set->bright_color,MN_Colors[1]);
getColor(&set->dark_color, MN_Colors[2]);
get(ST_PubScr ,MUIA_String_Contents,&dummy); strcpy(&set->pub_name[0] ,(char *)dummy);
get(ST_bg ,MUIA_String_Contents,&dummy); strcpy(&set->bg_picture[0] ,(char *)dummy);
get(IN_sizx ,MUIA_String_Integer, &dummy); set->x_siz=(UWORD)dummy;
get(IN_posx ,MUIA_String_Integer, &dummy); set->x_pos=(UWORD)dummy;
get(IN_posy ,MUIA_String_Integer, &dummy); set->y_pos=(UWORD)dummy;
}
static saveSettings(Object *listv, struct tm_sys_set *set, char *file)
{
int i;
ULONG my_file;
struct tm_gau_set *act;
if(my_file=(ULONG)Open(file,MODE_NEWFILE))
{
Write(my_file,set,(ULONG)sizeof(struct tm_sys_set));
for (i=0;;i++)
{
DoMethod(listv,MUIM_List_GetEntry,i,&act);
if(!act) break;
if(i==63) break;
Write(my_file,act,(ULONG)sizeof(struct tm_gau_set));
}
Close(my_file);
}
}
ULONG saveManager(struct IClass *cl,Object *obj, struct SaveSetMsg *msg)
{
int i=0;
char *file;
getSettings(maindata->set);
switch (msg->what)
{
case save_save:
saveSettings(visible,maindata->set,"ENVARC:TinyMeter");
case save_use:
saveSettings(visible,maindata->set,"ENV:TinyMeter");
TestSettings(test_test);
while(pubscr[i]) FreeVec(pubscr[i++]);
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
return(0L);
case save_test:
TestSettings(test_test);
return(obj);
case save_file:
if(file=getfilename(obj,GetStr(MM_SaveTitle),"#?.tm",TRUE))
saveSettings(visible,maindata->set,file);
break;
case save_cancel:
loadSettings(obj,maindata,"ENV:TinyMeter");
insertSettings(maindata->set,maindata->list);
TestSettings(test_test);
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
break;
}
return((ULONG)DoSuperMethodA(cl,obj,msg));
}
///
/******************************************/
/* other MainWindow methods */
/******************************************/
///
struct DoubleClkMsg
{
ULONG MethodID;
struct MainData *data;
};
static ULONG Dis_DoubleClick2(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
{
struct ls_layout *src;
DoMethod(ls_Switch,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&src);
if(src)
{
if(src->entry_max>0)
{
src->entry_selected++;if(src->entry_max<src->entry_selected)src->entry_selected=0;
DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_Active);
}
return(DoSuperMethodA(cl,obj,msg));
}
else return(0L);
}
static ULONG Dis_DoubleClick1(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
{
char *my_ptr;
DoMethod(ls_PubScr,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
if(my_ptr)
{
set(ST_PubScr,MUIA_String_Contents,my_ptr);
DoMethod(PO_PubScr,MUIM_Popstring_Close,0L);
return(DoSuperMethodA(cl,obj,msg));
}
else return(0L);
}
ULONG MainWindow_Finish(struct IClass *cl,Object *obj,Msg *msg)
{
int i=0;
struct MainData *data;
data=INST_DATA(cl,obj);
while(pubscr[i++]) FreeVec(pubscr[i]); pubscr[i]=0;
DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
return((ULONG)0L);
}
static GetPubScreens()
{
struct List *PubScreenList;
struct PubScreenNode *ScreenNode;
int i=0;
PubScreenList = LockPubScreenList();
for(ScreenNode=(struct PubScreenNode *)PubScreenList->lh_Head;ScreenNode->psn_Node.ln_Succ;ScreenNode=(struct PubScreenNode *)ScreenNode->psn_Node.ln_Succ)
{
pubscr[i]=(char *)AllocVec(256L,0L);
strcpy(pubscr[i],ScreenNode->psn_Node.ln_Name);
i++;
}
UnlockPubScreenList();
}
static ULONG MainWindow_New(struct IClass *cl,Object *obj,Msg *msg)
{
struct MainData *data;
int i;
GetPubScreens();
if (obj = (Object *)
DoSuperNew(cl,obj,
MUIA_Window_Title, GetStr(MO_Title),
MUIA_Window_ID , MAKE_ID('T','I','N','Y'),
WindowContents, VGroup, ButtonFrame,
Child, HGroup,
Child, VGroup, MUIA_Background, MUII_SHADOW,
Child, HVSpace,
Child, BodychunkObject,
MUIA_FixWidth , LOGO_WIDTH ,
MUIA_FixHeight , LOGO_HEIGHT,
MUIA_Bitmap_Width , LOGO_WIDTH ,
MUIA_Bitmap_Height , LOGO_HEIGHT,
MUIA_Bodychunk_Depth , LOGO_DEPTH ,
MUIA_Bodychunk_Body , (UBYTE *)logo_body,
MUIA_Bodychunk_Compression, LOGO_COMPRESSION,
MUIA_Bodychunk_Masking , LOGO_MASKING,
MUIA_Bitmap_SourceColors , (ULONG *)logo_colors,
MUIA_Bitmap_Transparent , 0,
MUIA_ShortHelp, "Greets to: hANGKOK, pEPE, bEZZZERK, tRACER, rALPH...",
End,
End,
Child, RegisterGroup(mainlister),
MUIA_Register_Frame, TRUE,
Child, HGroup,
Child, RegisterGroup(sublister),
MUIA_Register_Frame, TRUE,
Child, HGroup,
Child, ColGroup(2), GroupFrameT(GetStr(MOL_Handler)),
Child, HVSpace,
Child, HVSpace,
Child, Label(GetStr(MO_MemRefresh)),
Child, ColGroup(2), Child, NB_mem=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
Child, Label(GetStr(MO_VolRefresh)),
Child, ColGroup(2), Child, NB_vol=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
Child, Label(GetStr(MO_Wait)),
Child, ColGroup(2), Child, NB_wait=MUI_MakeObject(MUIO_NumericButton,NULL,0,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
Child, Label(GetStr(MO_TaskPrio)),
Child, ColGroup(2), Child, NB_pri=MUI_MakeObject(MUIO_NumericButton,NULL,-128,127,"%ld"), Child, HVSpace, End,
Child, HVSpace,
Child, HVSpace,
End,
Child, ColGroup(2), GroupFrameT(GetStr(MOL_sub_Layout)),
Child, HVSpace,
Child, HVSpace,
Child, Label(GetStr(MO_Colums)),
Child, ColGroup(2), Child, NB_col=MUI_MakeObject(MUIO_NumericButton,NULL,1,32,"%3ld"), Child, HVSpace, End,
Child, Label(GetStr(MO_FallingCol)),
Child, HGroup, Child, CM_Falling=CheckMark(NULL), Child, HVSpace, End,
Child, Label(GetStr(MO_SpaceX)),
Child, ColGroup(2), Child, NB_spcx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
Child, Label(GetStr(MO_SpaceY)),
Child, ColGroup(2), Child, NB_spcy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
Child, Label(GetStr(MO_BordX)),
Child, ColGroup(2), Child, NB_bordx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
Child, Label(GetStr(MO_BordY)),
Child, ColGroup(2), Child, NB_bordy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
Child, HVSpace,
Child, HVSpace,
End,
End,
Child, lv_Switch=(Object *)ListviewObject,
MUIA_Listview_Input, TRUE,
MUIA_Listview_DoubleClick, TRUE,
MUIA_Listview_List, ls_Switch=(Object *)ListObject,
MUIA_Frame, MUIV_Frame_InputList,
MUIA_List_ConstructHook, &lay_ConstructHook,
MUIA_List_DestructHook , &lay_DestructHook,
MUIA_List_DisplayHook , &lay_DisplayHook,
MUIA_List_Format , "MIW=5 MAW=100 BAR,",
MUIA_List_Active, MUIV_List_Active_Top,
End,
End,
Child, ColGroup(2),
Child, HVSpace,
Child, HVSpace,
Child, Label(GetStr(MO_Public)),
Child, PO_PubScr=(Object *)PopobjectObject,
MUIA_Popstring_String, ST_PubScr=(Object *)String(NULL,80),
MUIA_Popstring_Button, PopButton(MUII_PopUp),
MUIA_Popobject_Object, lv_PubScr=(Object *)ListviewObject,
MUIA_Listview_Input, TRUE,
MUIA_Listview_DoubleClick, TRUE,
MUIA_Listview_List, ls_PubScr=(Object *)ListObject,
MUIA_Frame, MUIV_Frame_InputList,
MUIA_List_Active, MUIV_List_Active_Top,
MUIA_List_SourceArray,&pubscr[0],
End,
End,
End,
Child, Label(GetStr(MO_WindowPos)),
Child, ColGroup(2),
Child, IN_posx=StringObject,
StringFrame,
MUIA_String_Accept , "0123456879",
End,
Child, IN_posy=StringObject,
StringFrame,
MUIA_String_Accept , "0123456879",
End,
End,
Child, Label(GetStr(MO_WindowSiz)),
Child, ColGroup(2),
MUIA_Group_SameWidth, TRUE,
Child, IN_sizx=StringObject,
StringFrame,
MUIA_String_Accept , "0123456879",
End,
Child, BT_Snap=SimpleButton(GetStr(MO_Snap)),
End,
Child, Label(GetStr(MO_BackgroundPic)),
Child, ST_bg=PopaslObject,
MUIA_Popstring_String, String(NULL,80),
MUIA_Popstring_Button, PopButton(MUII_PopFile),
ASLFO_TitleText , GetStr(MO_SelectBg),
End,
Child, Label(GetStr(MO_BackgroundCol)),
Child, ColGroup(2),Child, MN_Colors[0]=MakePen(), Child, HVSpace, End,
Child, Label(GetStr(MO_BrightCol)),
Child, ColGroup(2),Child, MN_Colors[1]=MakePen(), Child, HVSpace, End,
Child, Label(GetStr(MO_DarkCol)),
Child, ColGroup(2),Child, MN_Colors[2]=MakePen(), Child, HVSpace, End,
Child, HVSpace,
Child, HVSpace,
End,
End,
End,
Child, VGroup,
Child, NewObject(CL_ChooseFields->mcc_Class,NULL,TAG_DONE),
End,
End,
End,
Child, HGroup,
Child, BT_Save = (Object *)SimpleButton(GetStr(MO_Save)),
Child, BT_Use = (Object *)SimpleButton(GetStr(MO_Use)),
Child, BT_Test = (Object *)SimpleButton(GetStr(MO_Test)),
Child, BT_Cancel = (Object *)SimpleButton(GetStr(MO_Cancel)),
End,
End,
End)
{
data=INST_DATA(cl,obj);
set(BT_Save ,MUIA_ShortHelp,GetStr(MH_Save));
set(BT_Use ,MUIA_ShortHelp,GetStr(MH_Use));
set(BT_Test ,MUIA_ShortHelp,GetStr(MH_Test));
set(BT_Cancel ,MUIA_ShortHelp,GetStr(MH_Cancel));
set(NB_mem ,MUIA_ShortHelp,GetStr(MH_MemRefresh));
set(NB_vol ,MUIA_ShortHelp,GetStr(MH_VolRefresh));
set(NB_wait ,MUIA_ShortHelp,GetStr(MH_Wait));
set(lv_Switch ,MUIA_ShortHelp,GetStr(MH_Flags));
set(PO_PubScr ,MUIA_ShortHelp,GetStr(MH_Public));
set(IN_posx ,MUIA_ShortHelp,GetStr(MH_PosX));
set(IN_posy ,MUIA_ShortHelp,GetStr(MH_PosY));
set(IN_sizx ,MUIA_ShortHelp,GetStr(MH_SizX));
set(BT_Snap ,MUIA_ShortHelp,GetStr(MH_Snap));
set(ST_bg ,MUIA_ShortHelp,GetStr(MH_BackgroundPic));
set(MN_Colors[0],MUIA_ShortHelp,GetStr(MH_BackgroundCol));
set(MN_Colors[1],MUIA_ShortHelp,GetStr(MH_BrightCol));
set(MN_Colors[2],MUIA_ShortHelp,GetStr(MH_DarkCol));
set(NB_col ,MUIA_ShortHelp,GetStr(MH_Colums));
set(NB_spcx ,MUIA_ShortHelp,GetStr(MH_SpaceX));
set(NB_spcy ,MUIA_ShortHelp,GetStr(MH_SpaceX));
set(NB_bordx ,MUIA_ShortHelp,GetStr(MH_BordX));
set(NB_bordy ,MUIA_ShortHelp,GetStr(MH_BordY));
DoMethod(BT_Snap ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,1,Dis_ID_Snap);
DoMethod(BT_Save ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_save);
DoMethod(BT_Use ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_use );
DoMethod(BT_Test ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_test);
DoMethod(lv_PubScr,MUIM_Notify,MUIA_Listview_DoubleClick ,TRUE ,obj,2,Dis_ID_DoubleClick1,data);
DoMethod(lv_Switch,MUIM_Notify,MUIA_Listview_DoubleClick ,TRUE ,obj,1,Dis_ID_DoubleClick2);
DoMethod(obj ,MUIM_Notify,MUIA_Window_MenuAction ,MEN_SAVE,obj,2,Dis_ID_Save,save_file);
DoMethod(obj ,MUIM_Notify,MUIA_Window_MenuAction ,MEN_OPEN,obj,2,Dis_ID_Load,load_file);
DoMethod(BT_Cancel,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_cancel);
for(i=0;i<8;i++)DoMethod(ls_Switch,MUIM_List_InsertSingle,&switches[i],MUIV_List_Insert_Bottom);
DoMethod(obj ,Dis_ID_Load,load_standard);
}
return((ULONG)obj);
}
///
static __saveds __asm ULONG MainWindowDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
{
switch (msg->MethodID)
{
case OM_NEW : return (MainWindow_New (cl,obj,(APTR)msg));
case Dis_ID_Finish : return (MainWindow_Finish (cl,obj,(APTR)msg));
case Dis_ID_DoubleClick1 : return (Dis_DoubleClick1 (cl,obj,(APTR)msg));
case Dis_ID_DoubleClick2 : return (Dis_DoubleClick2 (cl,obj,(APTR)msg));
case Dis_ID_Save : return (saveManager (cl,obj,(APTR)msg));
case Dis_ID_Snap : return (snapWindow (cl,obj,(APTR)msg));
case Dis_ID_Load : return (loadManager (cl,obj,(APTR)msg));
}
return (DoSuperMethodA (cl,obj,(APTR)msg));
}
/*************************************************/
/* Init all classes */
/*************************************************/
///
VOID ExitClasses(VOID)
{
if (CL_FieldsList ) MUI_DeleteCustomClass(CL_FieldsList);
if (CL_ChooseFields) MUI_DeleteCustomClass(CL_ChooseFields);
if (CL_MainWindow) MUI_DeleteCustomClass(CL_MainWindow);
if (CL_Composer) MUI_DeleteCustomClass(CL_Composer);
if (CL_Launcher) MUI_DeleteCustomClass(CL_Launcher);
}
BOOL InitClasses(VOID)
{
CL_MainWindow = MUI_CreateCustomClass(NULL,MUIC_Window ,NULL, sizeof(struct MainData) ,MainWindowDispatcher);
CL_FieldsList = MUI_CreateCustomClass(NULL,MUIC_List ,NULL, sizeof(struct FieldsList_Data) ,FieldsList_Dispatcher);
CL_ChooseFields = MUI_CreateCustomClass(NULL,MUIC_Group ,NULL, sizeof(struct ChooseFields_Data) ,ChooseFields_Dispatcher);
CL_Composer = MUI_CreateCustomClass(NULL,MUIC_Window ,NULL, sizeof(struct Composer_Data) ,ComposerDispatcher);
CL_Launcher = MUI_CreateCustomClass(NULL,MUIC_Window ,NULL, sizeof(struct Launcher_Data) ,LauncherDispatcher);
if ( CL_FieldsList && CL_ChooseFields && CL_MainWindow && CL_Composer && CL_Launcher ) return(TRUE);
ExitClasses();
return(FALSE);
}
///
/*************************************************/
/* Main: MUIApplication and Aboutwindow */
/*************************************************/
///
#include <exec/tasks.h>
#ifdef _DCC
int brkfunc(void) { return(0); }
#endif
void LocalizeSwitches(struct ls_layout *ll)
{
int i;
for (;ll->entry_desc!=NULL;ll++)
{
ll->entry_desc=GetStr((int)ll->entry_desc);
for(i=0;i<6;i++)
{
if (ll->entry[i]!=NULL) ll->entry[i]=GetStr((int)ll->entry[i]);
else ll->entry[i]=" ";
}
}
}
int main(int argc, char *argv[])
{
Object *app,
*window;
struct Task *me;
if (MUIMasterBase = OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN))
{
if(me=FindTask(NULL))
{
if((me->tc_SPUpper-me->tc_SPLower)>8000)
{
if(maindata=(struct tm_data *)AllocVec(sizeof(struct tm_data),MEMF_CLEAR))
{
if(InitTestSettings())
{
InitClasses();
InitLocale();
LocalizeNewMenu(MenuData1);
LocalizeNewMenu(CmpMenuData);
LocalizeNewMenu(LauMenuData);
LocalizeSwitches(switches);
LocalizeStringArray(gau_types);
LocalizeStringArray(types);
LocalizeStringArray(indent);
LocalizeStringArray(mainlister);
LocalizeStringArray(sublister);
LocalizeStringArray(regcomposer);
LocalizeStringArray(reglauncher);
LocalizeStringArray(cyplace);
LocalizeStringArray(cyindent);
strcpy(&default_gauge.label[0],GetStr(MDef_Label));
strcpy(&default_gauge.format[0],GetStr(MDef_fmt));
strcpy(&default_gauge.expansion[0],GetStr(MDef_Device));
app = ApplicationObject,
MUIA_Application_Title , "TinyMeterPrefs V4.20",
MUIA_Application_Version , "$VER: TinyMeterPrefs V4.20 (14.5.96)",
MUIA_Application_Copyright , "©1994-96, Tinic Urou",
MUIA_Application_Author , "Tinic Urou",
MUIA_Application_Description, GetStr(MA_Description),
MUIA_Application_Base , "TMPREFS",
MUIA_Application_HelpFile , "HELP:TinyMeter.guide",
MUIA_Application_Menustrip , MN_Main = MUI_MakeObject(MUIO_MenustripNM,MenuData1,0),
SubWindow , window = (Object *)NewObject(CL_MainWindow->mcc_Class,NULL,TAG_DONE),
SubWindow , WI_About = WindowObject,
MUIA_Window_Title, GetStr(MA_About_Title),
MUIA_Window_ID , MAKE_ID('T','M','A','B'),
WindowContents, VGroup, ButtonFrame,
Child, BodychunkObject,
MUIA_FixWidth , ABOUT_WIDTH ,
MUIA_FixHeight , ABOUT_HEIGHT,
MUIA_Bitmap_Width , ABOUT_WIDTH ,
MUIA_Bitmap_Height , ABOUT_HEIGHT,
MUIA_Bodychunk_Depth , ABOUT_DEPTH ,
MUIA_Bodychunk_Body , (UBYTE *)about_body,
MUIA_Bodychunk_Compression, ABOUT_COMPRESSION,
MUIA_Bodychunk_Masking , ABOUT_MASKING,
MUIA_Bitmap_SourceColors , (ULONG *)about_colors,
MUIA_Bitmap_Transparent , 0,
End,
End,
End,
SubWindow , WI_HelpFmt = WindowObject,
MUIA_Window_Title, GetStr(MH_FormatHelp),
MUIA_Window_ID , MAKE_ID('T','H','L','P'),
MUIA_Window_UseRightBorderScroller, TRUE,
MUIA_Window_UseBottomBorderScroller, TRUE,
WindowContents, VGroup,
Child, ScrollgroupObject,
MUIA_Scrollgroup_UseWinBorder, TRUE,
MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
Child, TextObject,
MUIA_Text_Contents, GetStr(MOH_Format),
End,
End,
End,
End,
End,
SubWindow , WI_HelpClock = WindowObject,
MUIA_Window_Title, GetStr(MH_ClockHelp),
MUIA_Window_ID , MAKE_ID('T','H','L','P'),
MUIA_Window_UseRightBorderScroller, TRUE,
MUIA_Window_UseBottomBorderScroller, TRUE,
WindowContents, VGroup,
Child, ScrollgroupObject,
MUIA_Scrollgroup_UseWinBorder, TRUE,
MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
Child, TextObject,
MUIA_Text_Contents, GetStr(MOH_Clock),
End,
End,
End,
End,
End,
End;
if(app)
{
DoMethod(app ,MUIM_Notify,MUIA_Application_MenuAction,MEN_QUIT ,app , 2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit);
DoMethod(app ,MUIM_Notify,MUIA_Application_MenuAction,MEN_ABOUT,WI_About, 3,MUIM_Set ,MUIA_Window_Open,TRUE);
DoMethod(WI_About ,MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,WI_About, 3,MUIM_Set ,MUIA_Window_Open,FALSE);
DoMethod(WI_HelpFmt ,MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,WI_HelpFmt, 3,MUIM_Set ,MUIA_Window_Open,FALSE);
DoMethod(WI_HelpClock,MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,WI_HelpClock,3,MUIM_Set ,MUIA_Window_Open,FALSE);
DoMethod(window, MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,app, 2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit);
set(window,MUIA_Window_Open,TRUE);
{
ULONG sigs = 0;
while (DoMethod(app,MUIM_Application_NewInput,&sigs) != MUIV_Application_ReturnID_Quit)
{
if (sigs)
{
sigs = Wait(sigs | SIGBREAKF_CTRL_C);
if (sigs & SIGBREAKF_CTRL_C) break;
}
}
}
MUI_DisposeObject(app);
}
ExitLocale();
ExitClasses();
FreeTestSettings();
}
if(maindata->set)FreeVec(maindata->set);
FreeVec(maindata);
}
}
else MUI_RequestA(NULL,NULL,0,"Early Startup","OK","Stacksize too small!\n\nA minimum of 8192 bytes is needed.",NULL);
}
CloseLibrary(MUIMasterBase);
}
return(0);
}
int wbmain(struct WBStartup *wb_startup)
{
return(main(0, (char **)wb_startup));
}
///